Pythonミニ制作:Todoリストをターミナルで作る

入門 | 13分 で読める | 2026.07.13

公式ドキュメント

今回やること

Todoリストは、複数のタスクを扱う練習に向いています。

今回は安全に動作確認しやすいように、入力待ちではなく決まった操作を順番に実行します。

Todoは辞書、一覧はリスト、追加・完了・表示は別の関数に分けます。リスト操作辞書操作関数の基本を一つにまとめる制作です。

完成コード

todo_list.py を作ります。

todos = []


def add_todo(title):
    todos.append({"title": title, "done": False})


def complete_todo(index):
    if 0 <= index < len(todos):
        todos[index]["done"] = True


def show_todos():
    for index, todo in enumerate(todos):
        mark = "x" if todo["done"] else " "
        print(f"{index + 1}. [{mark}] {todo['title']}")


add_todo("Pythonを30分学習する")
add_todo("エラー文を読む練習をする")
add_todo("学習メモを書く")

complete_todo(1)
show_todos()

動作確認

python todo_list.py

次のように2番目だけ[x]になれば、基本関数の確認は成功です。

1. [ ] Pythonを30分学習する
2. [x] エラー文を読む練習をする
3. [ ] 学習メモを書く

対話メニューへ広げる

固定操作が動いたら、while文で「追加・一覧・完了・終了」を選ぶループへ広げます。表示番号は1始まりなので、完了関数へ渡す前にselected_number - 1へ変換します。

最初は追加と一覧だけを実装し、次に完了、最後に終了条件を加えます。一度に全メニューを書くより、各操作後にshow_todos()で状態を確認する方が原因を切り分けやすくなります。

固定した3回の関数呼び出しを削除し、代わりに次のループを置きます。

while True:
    command = input("1:追加 2:一覧 3:完了 0:終了 > ").strip()

    if command == "1":
        add_todo(input("Todo: ").strip())
    elif command == "2":
        show_todos()
    elif command == "3":
        try:
            selected_number = int(input("完了する番号: "))
        except ValueError:
            print("数字を入力してください")
            continue

        index = selected_number - 1
        if 0 <= index < len(todos):
            complete_todo(index)
        else:
            print("存在する番号を入力してください")
    elif command == "0":
        break
    else:
        print("0から3を入力してください")

コードの考え方

  • Todoは辞書で表します
  • Todo一覧はリストで持ちます
  • add_todo は追加担当です
  • complete_todo は完了担当です
  • show_todos は表示担当です

よくあるエラー

エラー原因修正
IndexError存在しない番号を指定した範囲チェックを入れる
完了にならないdone のキー名が違うキー名を統一する
表示がずれる0始まりと1始まりを混同内部は0、表示は+1

数字以外や範囲外の番号ではデータを変更せず、案内を表示します。現在のリストはメモリ上だけにあるため、プログラムを終了すると消えます。保存はファイルの読み書きを学んだ後に追加します。

練習

  1. Todoを5件に増やす
  2. 1番目のTodoを完了にする
  3. 未完了だけ表示する関数を作る

次のステップ

次はTodoを再起動後も残せるよう、保存形式を一つ選んで追加します。

参考リソース

← 一覧に戻る
PR
PR
PR
PR