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

Python

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

【コピペで使えるPython】タスク管理アプリを作ろう 1-1
Pythonを学びたい方のために、すぐに動くタスク管理アプリのサンプルコードを作成しました。簡単なコードの組み合わせですが、基礎知識を学べるようなコードです!3ステップに分けて、実際にアプリを作りながら学べる内容となっています。今回は、アプ...
【コピペで使えるPython】タスク管理アプリを作ろう 1-2
前回に引き続き、タスク管理アプリの解説をしていきます。1-1を見ていない方は、下記のURLからご覧ください!完成形のコードを見てみましょうまずは、前回同様コード全体を確認していきましょう。サンプルコードをクリックすると全体のコードが表示され...

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

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

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

コードの解説

タスクの削除 delete_task(mytask):

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

# タスクの削除
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("番号は数字で入力してください")
  • mytask にタスクが一つも登録されていなければ、「削除するタスクがありません。」と表示し、処理を終了(関数から抜ける)します。
if not mytask:
print("削除するタスクがありません。")
return
  • タスクがある場合は、削除操作を繰り返しできるようにループ開始
else:
while True:
  • 削除したいタスクを選びやすいように、現在のタスク一覧をenumerate を使って、1番から順に番号を割り振って表示。
print("===== タスク一覧 =====")
for index, task in enumerate(mytask):
print(f"{index + 1}. {task}")
print("======================")
  • ユーザーに削除したいタスクの番号を入力してもらう。
    「0」を入力した場合は削除操作を中断。
delete_number = input("削除するタスク番号(削除を辞める場合は 0 と入力):")
  • 入力が数字かどうかを判定するため、文字列を整数に変換を試みる。
    数字でなければ、ValueError が起こり、例外処理に移ります。
try:
index = int(delete_number)
  • 「0」が入力されたら、削除操作をキャンセルしたと表示し、whileループを抜けて関数を終了。
if index == 0:
print("削除をキャンセルしました。")
break
  • 入力された番号がタスクの範囲内(存在する番号)なら、その番号に対応するタスクを削除。
    pop(index – 1) でリストの該当タスクを削除(番号とインデックスの差に注意)
  • 削除後にループを抜けて処理終了。
elif 1 <= index <= len(mytask):
mytask.pop(index - 1)
break
  • 範囲外の番号が入力された場合は、エラーメッセージを表示し、ループを続けて再入力を促す。
else:
print("その番号のタスクは存在しません。")
print()
  • 数字以外が入力された場合は、数字で入力するようメッセージを出し、再度入力を求める
except ValueError:
print("番号は数字で入力してください")

アプリを終了 exit_app(mytask):

この関数は、ユーザーがアプリを終了する処理です。
execution_operation(mytask) でユーザーが「4」を入力したときに呼び出されます。

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()
  • もし未完了のタスクがリストに残っていたら、ユーザーに「残りのタスクを表示するかどうか」を確認
if mytask:
    show = input("残りのタスクを表示しますか? (y/n):")
  • ユーザーが「y」と入力した場合、タスクの一覧を番号付きで表示。
    enumerate を使って1から始まる番号を付けて見やすく表示。
if show.lower() == "y":
     print("===== 残りのタスク =====")   
     for index, task in enumerate(mytask):
          print(f"{str(index + 1)}. " + task)
     print("======================")
  • タスクが一つも残っていなければ、「残りタスクはありません」と表示
else:
print("残りタスクはありません")
  • ここでアプリケーションを強制終了。
    sys.exit() を使うために、コードの先頭で import sys が必要です。
sys.exit()

まとめ

これで、ステップ1全てのコードの解説が終わりました。
いかがでしたでしょうか。

初めてPythonに触れた方も、勉強を始めたばかりの方にも楽しんでいただけるように、なるべく詳しく解説を書くようにしました。実際に実行してみて、こんな感じで動くんだ!と次のコードを書く原動力になったらとても嬉しいです!

私自身、初めてHTMLでボタンが画面上に出た時、とっても嬉しかったことを今でもはっきり覚えています。楽しいは何よりも原動力になる感情だと思います。

ステップ2では、より使いやすいタスク管理アプリになるように頑張っていきましょう!!

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