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:タスクリストを表示。
- 3:タスクを削除。
- 4:終了してタスクを保存。
- 終了:
- タスクリストをファイルに保存し、プログラムを終了。
実行例
開始時
ToDoリストアプリケーションへようこそ!
保存されたタスクリストを読み込みました(3件)。
タスクを追加
操作を選択してください:
1: タスクを追加
2: タスクリストを表示
3: タスクを削除
4: 終了
選択: 1
追加するタスクを入力してください: 買い物
タスク '買い物' を追加しました。
タスクリストを表示
操作を選択してください:
2
現在のタスクリスト:
1: 掃除
2: 洗濯
3: 勉強
4: 買い物
タスクを削除
操作を選択してください:
3
削除するタスクの番号を入力してください:
1: 掃除
2: 洗濯
3: 勉強
4: 買い物
番号: 2
タスク '洗濯' を削除しました。
終了時
操作を選択してください:
4
タスクリストを保存しました。アプリケーションを終了します。
特徴とポイント
- データ永続性:
- タスクリストをファイルに保存・読み込みできるため、アプリを再起動してもデータが失われません。
- 例外処理:
- 無効な入力や番号エラーを適切に処理して、安全に動作します。
- 拡張性:
- 優先度の設定やタスクの締切日を追加するなど、簡単に機能を拡張できます。
このアプリケーションは、ファイル操作と例外処理を学ぶ良い例です!
コメント