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

Python

前回に引き続き、タスク管理アプリの解説をしていきます。
1-1を見ていない方は、下記のURLからご覧ください!

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

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

まずは、前回同様コード全体を確認していきましょう。
サンプルコードをクリックすると全体のコードが表示されます。

#!/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()

コードの解説

ユーザーの入力に基づいた処理を行う execution_operation(mytask):

# ユーザーの入力に基づいた処理
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
}
  • input() は、ユーザーのキーボード入力を取得するための関数です。ここでは、操作メニューの番号(1〜4)を入力してもらい、その番号に対応する処理を行う仕組みです。
  • print() は、画面上での可読性を高めるための空行出力です。
    ユーザーが操作した結果がメニューのすぐ下に続かないようにして、見やすく整えています。
  • if execution in operations: では、ユーザーが入力した番号が操作一覧 operations に存在するかをチェックしています。該当する場合は operations[execution](mytask) によって、対応する関数が実行されます。無効な番号の場合は、「無効な選択です。もう一度試してください。」と表示し、再び操作メニューが表示されます。
  • この流れは、main() 関数内の while True: によってループ処理されているため、ユーザーが「アプリを終了する」を選ぶまで繰り返されます
    while True:
        # 操作リスト
        display_operations()

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

下記の辞書は、ユーザーが入力した番号(文字列)と、それに対応する関数を結びつけています。
例えば “1” を入力すれば add_task() が実行されるという仕組みです。

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

このように辞書を使って関数を管理することで、分岐処理を簡潔に書くことができ、機能追加も柔軟に行える構造になります。

タスクの追加 add_task(mytask):

この関数は、ユーザーが新しいタスクを追加できるようにする処理です。
execution_operation(mytask) でユーザーが「1」を入力したときに呼び出されます。

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

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

    # 追加
    mytask.append(add)
    print(f"タスク「{add}」を追加しました。")
  • input() でタスクの内容をユーザーに尋ねます。
add = input("追加タスク(追加を辞める場合は 0 と入力):")
  • ユーザーが "0" を入力した場合
    追加をキャンセルしたと判断し、メッセージを表示して、return で関数の処理を中断し、メニュー画面に戻ります。
if add == "0":
print("追加をキャンセルしました。")
return
  • "0" 以外を入力した場合
    入力された文字列をタスクリスト mytask に追加し、タスク追加を知らせるメッセージを表示
mytask.append(add)
print(f"タスク「{add}」を追加しました。")
  • mytask はリストとして main() から渡されており、ここでの変更は全体に共有される
  • return を使って関数の処理を早期終了することで、無駄な処理を防いでいる

タスク一覧の表示 task_list(mytask):

この関数は、現在登録されているタスクの一覧をコンソール上に表示します。
ユーザーが操作メニューで「2. タスク一覧を見る」を選んだときに呼び出されます。

# タスク一覧の表示
def task_list(mytask):
    if not mytask:
        print("表示するタスクがありません。")
        return
    else:
        print("===== タスク一覧 =====")
        for index, task in enumerate(mytask):
            print(f"{str(index + 1)}. {task}")
        print("======================")
  • mytask(タスクのリスト)が空(=タスク未登録)の場合、 「表示するタスクがありません。」と表示して、return によって、それ以降の処理はスキップされ、再びメニュー画面に戻ります。
if not mytask:
print("表示するタスクがありません。")
return
  • タスクの件数に応じて、1行ずつ一覧表示。
  • enumerate(mytask) を使うことで、インデックス(連番)とタスク内容の両方を簡単に扱えます。
  • 表示番号は index + 1 として、1から始まるように調整。番号付きで出力しているため、削除などの操作時に番号指定しやすくなる構成になっている。
print("===== タスク一覧 =====")
for index, task in enumerate(mytask):
print(f"{str(index + 1)}. {task}")
print("======================")

まとめ

今回は、タスク管理アプリの全体像から、実際の操作の追加と一覧表示を紹介しました。
残るは、削除と終了だけになり、だいぶ形になってきましたね。

実際に動くものが出来上がってくるとワクワクしますよね。
最後まで頑張りましょう!!

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