【プログラム解説】ToDoリストアプリケーション

program
import os

def save_tasks(tasks, filename="tasks.txt"):
    with open(filename, "w") as file:
        for task in tasks:
            file.write(task + "\n")

def load_tasks(filename="tasks.txt"):
    if os.path.exists(filename):
        with open(filename, "r") as file:
            return [line.strip() for line in file]
    return []

def todo_app():
    print("ToDoリストアプリケーションへようこそ!")

    tasks = load_tasks()
    print(f"保存されたタスクリストを読み込みました({len(tasks)}件)。")

    while True:
        print("\n操作を選択してください:")
        print("1: タスクを追加")
        print("2: タスクリストを表示")
        print("3: タスクを削除")
        print("4: 終了")
        choice = input("選択: ")

        if choice == "1":
            task = input("追加するタスクを入力してください: ")
            tasks.append(task)
            print(f"タスク '{task}' を追加しました。")
        elif choice == "2":
            print("\n現在のタスクリスト:")
            if not tasks:
                print("タスクリストは空です。")
            else:
                for i, task in enumerate(tasks, start=1):
                    print(f"{i}: {task}")
        elif choice == "3":
            print("\n削除するタスクの番号を入力してください:")
            for i, task in enumerate(tasks, start=1):
                print(f"{i}: {task}")
            try:
                task_num = int(input("番号: "))
                removed_task = tasks.pop(task_num - 1)
                print(f"タスク '{removed_task}' を削除しました。")
            except (ValueError, IndexError):
                print("無効な番号です。")
        elif choice == "4":
            save_tasks(tasks)
            print("タスクリストを保存しました。アプリケーションを終了します。")
            break
        else:
            print("無効な選択です。もう一度お試しください。")

# プログラムの実行
todo_app()

このコードは、Pythonを使って作成されたToDoリストアプリケーションです。ユーザーがタスクを追加、表示、削除、保存できる簡単なタスク管理ツールです。終了時にはタスクリストがファイルに保存され、次回起動時に再読み込みされます。


コードの詳細な説明


1. ファイルにタスクを保存する関数

def save_tasks(tasks, filename="tasks.txt"):
with open(filename, "w") as file:
for task in tasks:
file.write(task + "\n")
  • 役割
    • 現在のタスクリスト(tasks)を指定したファイル(デフォルトは "tasks.txt")に保存します。
  • 動作
    • with open(filename, "w") でファイルを「書き込みモード」で開きます。
    • リスト tasks の各タスクを1行ずつファイルに書き込みます(改行付き)。

2. ファイルからタスクを読み込む関数

def load_tasks(filename="tasks.txt"):
if os.path.exists(filename):
with open(filename, "r") as file:
return [line.strip() for line in file]
return []
  • 役割
    • ファイル(デフォルトは "tasks.txt")からタスクリストを読み込んで返します。
  • 動作
    • ファイルの存在確認
      • os.path.exists(filename) を使ってファイルが存在するか確認します。
      • 存在しない場合、空のリストを返します。
    • ファイル読み込み
      • ファイルを「読み取りモード」で開き、各行をリストに追加します。
      • .strip() を使い、行末の改行文字を除去します。

3. メインのアプリケーションロジック

def todo_app():
print("ToDoリストアプリケーションへようこそ!")

tasks = load_tasks()
print(f"保存されたタスクリストを読み込みました({len(tasks)}件)。")
  • アプリケーション開始時
    • 保存されたタスクを読み込んでリスト tasks に格納します。
    • 読み込んだタスクの件数を表示します。

4. 操作メニューのループ

while True:
print("\n操作を選択してください:")
print("1: タスクを追加")
print("2: タスクリストを表示")
print("3: タスクを削除")
print("4: 終了")
choice = input("選択: ")
  • 無限ループ
    • ユーザーが明示的に「終了」を選択するまで繰り返します。
  • 操作オプション
    • 1:タスクを追加。
    • 2:現在のタスクリストを表示。
    • 3:タスクを削除。
    • 4:終了し、タスクリストを保存。

5. 各操作の実装


(1) タスクの追加
if choice == "1":
task = input("追加するタスクを入力してください: ")
tasks.append(task)
print(f"タスク '{task}' を追加しました。")
  • 動作
    • ユーザーの入力を tasks リストに追加します。
    • タスクを追加したことをメッセージで通知します。

(2) タスクリストの表示
elif choice == "2":
print("\n現在のタスクリスト:")
if not tasks:
print("タスクリストは空です。")
else:
for i, task in enumerate(tasks, start=1):
print(f"{i}: {task}")
  • 動作
    • tasks が空の場合、「タスクリストは空です」と表示。
    • タスクがある場合、enumerate() を使って番号付きでタスクリストを表示します。

(3) タスクの削除
elif choice == "3":
print("\n削除するタスクの番号を入力してください:")
for i, task in enumerate(tasks, start=1):
print(f"{i}: {task}")
try:
task_num = int(input("番号: "))
removed_task = tasks.pop(task_num - 1)
print(f"タスク '{removed_task}' を削除しました。")
except (ValueError, IndexError):
print("無効な番号です。")
  • 動作
    • 現在のタスクリストを番号付きで表示します。
    • ユーザーが削除したいタスクの番号を入力。
    • 例外処理
      • 入力が無効な場合(数値以外、範囲外の番号)にはエラーメッセージを表示します。

(4) アプリケーションの終了
elif choice == "4":
save_tasks(tasks)
print("タスクリストを保存しました。アプリケーションを終了します。")
break
  • 動作
    • 現在の tasks をファイルに保存します。
    • 終了メッセージを表示してループを抜け、プログラムを終了します。

(5) 無効な選択
else:
print("無効な選択です。もう一度お試しください。")
  • 動作
    • メニューで無効な選択をした場合、エラーメッセージを表示して再入力を求めます。

プログラムの動作フロー

  1. 開始時
    • 保存されたタスクリストを読み込み。
    • メニューを表示。
  2. 選択した操作に応じて以下を実行
    • 1:タスクを追加。
    • 2:タスクリストを表示。
    • 3:タスクを削除。
    • 4:終了してタスクを保存。
  3. 終了
    • タスクリストをファイルに保存し、プログラムを終了。

実行例

開始時

ToDoリストアプリケーションへようこそ!
保存されたタスクリストを読み込みました(3件)。

タスクを追加

操作を選択してください:
1: タスクを追加
2: タスクリストを表示
3: タスクを削除
4: 終了
選択: 1
追加するタスクを入力してください: 買い物
タスク '買い物' を追加しました。

タスクリストを表示

操作を選択してください:
2
現在のタスクリスト:
1: 掃除
2: 洗濯
3: 勉強
4: 買い物

タスクを削除

操作を選択してください:
3
削除するタスクの番号を入力してください:
1: 掃除
2: 洗濯
3: 勉強
4: 買い物
番号: 2
タスク '洗濯' を削除しました。

終了時

操作を選択してください:
4
タスクリストを保存しました。アプリケーションを終了します。

特徴とポイント

  1. データ永続性
    • タスクリストをファイルに保存・読み込みできるため、アプリを再起動してもデータが失われません。
  2. 例外処理
    • 無効な入力や番号エラーを適切に処理して、安全に動作します。
  3. 拡張性
    • 優先度の設定やタスクの締切日を追加するなど、簡単に機能を拡張できます。

このアプリケーションは、ファイル操作と例外処理を学ぶ良い例です!

コメント

タイトルとURLをコピーしました
//投稿内コードにコピー表示 //コピー表示ここまで