【コピペで使えるPython】タスク管理アプリを作ろう 1-1

Python

Pythonを学びたい方のために、すぐに動くタスク管理アプリのサンプルコードを作成しました。
簡単なコードの組み合わせですが、基礎知識を学べるようなコードです!
3ステップに分けて、実際にアプリを作りながら学べる内容となっています。

今回は、アプリの土台になる基礎の処理を作っていきます。
なるべく細かく説明を書いておりますので、まずは動かしてみて、
1つずつ意味を理解していけると良いと思います!

ステップごとの目的

STEP 目的 内容
1 Pythonの変数、リスト、if文、ループ、inputの使い方を覚える ・タスクをリストに追加できる
・現在のタスク一覧を表示できる
・タスクを削除できる(番号で指定)
・終了操作ができる(アプリ終了)
・無効な操作に対するエラーメッセージ表示
・操作メニューを繰り返し表示(ループ処理)
2 ファイル操作、辞書、日付の扱い、データ構造を理解する ・ファイルにタスクを保存する(例:JSON形式)
・アプリ起動時に保存ファイルからタスクを読み込む
・タスクに「期限(日付)」を追加できる
・タスクに「優先度(高・中・低)」を設定できる
・完了したタスクにチェックを入れられる
・完了済みタスクと未完了タスクを分けて表示
3 応用的なデータ処理、関数化、保守しやすいコード設計を学ぶ ・タスクを期限順、または優先度順に並べ替え表示
・タグやカテゴリでタスクを分類
・タスクをキーワードで検索できる
・各機能を関数に分割し、コードを整理
・必要に応じてクラスを導入
・エラーハンドリングを追加して安定性アップ

完成形のコードを見てみましょう

ステップ1の解説に入る前に、完成系のコードを見てみましょう。
サンプルコードをクリックすると全体のコードが表示されます。
※ある程度知識のある方は、下の説明をみながら、全体コードを完成させてもいいですね!

#!/usr/bin/env python3

import sys

# タスクの追加
def add_task(mytask):
    # ユーザーが入力したタスクを追加
    add = input("追加タスク(追加を辞める場合は 0 と入力):")

    # 追加をやめる場合
    if add == "0":
        print("追加をキャンセルしました。")
        return

    # 追加
    mytask.append(add)
    print(f"タスク「{add}」を追加しました。")

# タスク一覧の表示
def task_list(mytask):
    if not mytask:
        print("表示するタスクがありません。")
        return
    else:
        print("===== タスク一覧 =====")
        for index, task in enumerate(mytask):
            print(f"{str(index + 1)}. {task}")
        print("======================")

# タスクの削除
def delete_task(mytask):

    if not mytask:
        print("削除するタスクがありません。")
        return
    else:
        while True:
            # 削除対象を選べるように一覧表示
            print("===== タスク一覧 =====")   
            for index, task in enumerate(mytask):
                print(f"{index + 1}. {task}")
            print("======================")
                
            delete_number = input("削除するタスク番号(削除を辞める場合は 0 と入力):")

            try:
                # 数字が選択された場合
                index = int(delete_number)
                # 削除をやめる場合
                if index == 0:
                    print("削除をキャンセルしました。")
                    break
                # 削除
                elif 1 <= index <= len(mytask):
                    # 選択された番号のタスクを削除
                    mytask.pop(index - 1)
                    break
                else:
                    print("その番号のタスクは存在しません。")
                    print()

            except ValueError:
                print("番号は数字で入力してください")

# アプリを終了
def exit_app(mytask):
    if mytask:
        show = input("残りのタスクを表示しますか? (y/n):")
        if show.lower() == "y":
            print("===== 残りのタスク =====")   
            for index, task in enumerate(mytask):
                print(f"{str(index + 1)}. " + task)
            print("======================")
    else:
        print("残りタスクはありません")
    sys.exit()

# 操作リストの表示
def display_operations():
     print("===== 操作メニュー =====")
     operation_list = [
        "1. タスクを追加する",
        "2. タスク一覧を見る",
        "3. タスクを削除する",
        "4. アプリを終了する"
    ]

     for task in operation_list:
        print(task)
     print("======================")

# ユーザーの入力に基づいた処理
def execution_operation(mytask):
    execution = input("番号を選んでください:")
    print()

    # 有効な番号が入力された場合、その番号の操作を実行
    if execution in operations:
        operations[execution](mytask)
    else:
        print("無効な選択です。もう一度試してください。")

# 操作に対応する関数のマッピング
operations = {
    "1": add_task,
    "2": task_list,
    "3": delete_task,
    "4": exit_app
}

# メイン処理
def main():

    # タスクを格納するリスト
    mytask = []

    while True:
        # 操作リスト
        display_operations()

        # 実操作
        execution_operation(mytask)
        print("\n\n")

if __name__ == "__main__":
    main()
Ami
Ami

このサンプルコードは、コンソールで見やすいように、print文に ” = ” を多く使用しています。各々の見やすいように修正してください!

実行イメージ(例)

===== 操作メニュー =====
1. タスクを追加する
2. タスク一覧を見る
3. タスクを削除する
4. アプリを終了する
======================
番号を選んでください:3

===== タスク一覧 =====
1. 勉強する
2. 洗濯する
3. ブログを書く
======================
削除するタスク番号(削除を辞める場合は 0 と入力):2

コードの解説

最初に確認するのは if __name__ == "__main__":

コードを読む時は、 if __name__ == "__main__": の下に書かれている関数を実行の起点として、最初にその関数から追うのが基本です。
例えば test() が書かれている場合、そこからコードを追い始めます。

if __name__ == "__main__":
main()

プログラムの起点となる main() 関数

# メイン処理
def main():
# タスクを格納するリスト
mytask = []
while True:

# 操作リスト
display_operations()

# 実操作
execution_operation(mytask)
print("\n\n")
  • mytask リストは、このメイン関数内で初期化され、execution_operation() 関数に渡されることで、関数内でも同じリストを共有して操作できるようにしています。
  • while True: によって無限ループを作り、毎回メニューを表示し、操作を受け付けます。
    このループは breakreturn がない限り終了しません。
    今回の処理では、ユーザーが「アプリ終了」を選ぶまでループが続く構造になっています。
  • print("\n\n") は、画面上での可読性を高めるための空行出力です。

操作リストを表示する関数 display_operations()

# 操作リストの表示
def display_operations():
     print("===== 操作メニュー =====")
     operation_list = [
        "1. タスクを追加する",
        "2. タスク一覧を見る",
        "3. タスクを削除する",
        "4. アプリを終了する"
    ]
     for task in operation_list:
        print(task)
     print("======================")
  • ユーザーに現在利用できる操作をコンソール上に表示するための関数。
  • print() 文を使って、どのような操作が可能かを視覚的にわかりやすく案内します。
  • 操作項目は、operation_list というリストにまとめており、個別に print() を繰り返す代わりに、for 文で一括出力しています。
print("1. タスクを追加する")
print("2. タスク一覧を見る")
               :

※上記のようにも書くことはできるが、リストで定義しておくことで、他の処理でも operation_list を再利用しやすくなり、メニュー内容の管理や変更も簡単になる

保守性が高い:リストにまとめているので、操作項目の追加・変更が簡単
再利用性:同じメニューを別の場所で使いたいときも、リストごと使い回せる

まとめ

今回は、タスク管理アプリの全体像から、操作リストまでを紹介しました。
難しく感じる部分もあるかもしれませんが、一つずつ理解していくと、汎用性のあるコードばかりです。

次回は、実操作の処理を解説していきます。
ぜひコードを実際に動かして、理解を深めてくださいね!

タイトルとURLをコピーしました