SerchCode Pro
コード解説 SQLチェッカー JSON生成 JSON整形 RegExテスター CSS Shadow カラー変換 CRON生成 Base64変換 ブログ
SerchCode Pro
コード解説 🔍 SQLチェッカー 🔍 JSON生成 🔧 JSON整形 🔧 RegExテスター 💻 CSS Shadow 🔲 カラー変換 🔲 CRON生成 💻 Base64変換 🖌 ブログ 📖

このサイトについて プライバシーポリシー
ダークモード ライトモード

【Pythonで学ぶ次の一歩】ToDoリストの作り方|リスト操作を完全マスター

公開日: 2025年10月10日

前回の記事で作成した「数当てゲーム」で、Pythonの基本的な文法(変数、ループ、条件分岐)には慣れてきた頃ではないでしょうか。 しかし、プログラミングの世界では、一つのデータだけでなく、複数のデータの集まりを扱う場面が圧倒的に多くあります。

そこで今回は、次のステップとして、より実用的な「コマンドラインToDoリストアプリ」を作ります。

このアプリ開発を通して、あなたはPythonで最もよく使われるデータ構造である「リスト」の扱い方を完全にマスターすることができます。 「リストにデータを追加する」「リストの中身をすべて表示する」「リストから特定のデータを削除する」——これら全ての基本操作を、動くプログラムを作りながら体で覚えていきましょう。

📝 完成形と機能の確認

今回作成するToDoリストアプリの動きを先に見てみましょう。このアプリには3つのシンプルな機能があります。

  1. タスクを追加できる (add)
  2. 現在のタスクを一覧表示できる (list)
  3. タスクを番号で指定して完了(削除)できる (done)

実行結果のイメージ

コマンドを選択してください (add, list, done, exit): add
追加するタスクを入力してください: Pythonのブログ記事を書く

コマンドを選択してください (add, list, done, exit): add
追加するタスクを入力してください: 牛乳を買う

コマンドを選択してください (add, list, done, exit): list
--- ToDoリスト ---
1: Pythonのブログ記事を書く
2: 牛乳を買う
------------------

コマンドを選択してください (add, list, done, exit): done
完了にするタスクの番号を入力してください: 2

コマンドを選択してください (add, list, done, exit): list
--- ToDoリスト ---
1: Pythonのブログ記事を書く
------------------

コマンドを選択してください (add, list, done, exit): exit
アプリを終了します。

完成コード全体

先に全体のコードを示します。このコードの各パーツが何を意味しているのか、これから一つずつ丁寧に解説していきます。


# ToDoリストを保存するための空のリスト
todos = []

print("シンプルなToDoリストアプリ")

while True:
    command = input("コマンドを選択してください (add, list, done, exit): ")

    if command == "add":
        task = input("追加するタスクを入力してください: ")
        todos.append(task)
        print("タスクを追加しました。")

    elif command == "list":
        print("--- ToDoリスト ---")
        # enumerateを使って、インデックスと要素を同時に取得
        for i, task in enumerate(todos, start=1):
            print(f"{i}: {task}")
        print("------------------")

    elif command == "done":
        try:
            done_index_str = input("完了にするタスクの番号を入力してください: ")
            done_index = int(done_index_str) - 1 # ユーザー入力は1から、リストは0から

            # 有効なインデックスかチェック
            if 0 <= done_index < len(todos):
                removed_task = todos.pop(done_index)
                print(f"タスク「{removed_task}」を完了しました。")
            else:
                print("無効な番号です。")
        except ValueError:
            print("番号で入力してください。")

    elif command == "exit":
        print("アプリを終了します。")
        break

    else:
        print("無効なコマンドです。")

🧩 コードの組み立て方をステップ解説

1. データを保存する「器」を用意する (リスト)

まず、ユーザーが追加したToDoタスクを保存しておく場所が必要です。複数のデータを順番にしまっておける便利な箱、それがリストです。


# ToDoリストを保存するための空のリスト
todos = []
        

[] は、中身が何もない空のリストを意味します。この todos というリストに、これからタスクを追加したり、削除したりしていきます。

2. コマンドを受け付けるメインループ

数当てゲームの時と同じように、ユーザーが「exit」と入力するまで、何度もコマンドを受け付けるための無限ループを作ります。そして、if-elif-else を使って、入力されたコマンドに応じて処理を分岐させます。


while True:
    command = input("コマンドを選択してください (add, list, done, exit): ")

    if command == "add":
        # 追加処理
    elif command == "list":
        # 一覧表示処理
    elif command == "done":
        # 削除処理
    elif command == "exit":
        break # ループを抜ける
    else:
        print("無効なコマンドです。")
        

3. 機能の実装 (1) - タスクの追加 (append)

add コマンドが入力されたら、新しいタスクを受け取り、todos リストの末尾に追加します。リストに要素を追加するには append() というメソッドを使います。


# if command == "add": の中身
task = input("追加するタスクを入力してください: ")
todos.append(task)
print("タスクを追加しました。")
        

たったこれだけで、todosリストにどんどんタスクが溜まっていくようになります。

4. 機能の実装 (2) - タスクの一覧表示 (for と enumerate)

list コマンドが入力されたら、todos リストの中身を順番に、番号付きで表示します。ここで活躍するのが for ループと enumerate() 関数です。


# elif command == "list": の中身
print("--- ToDoリスト ---")
for i, task in enumerate(todos, start=1):
    print(f"{i}: {task}")
print("------------------")
        

enumerate(todos, start=1) は、リストの中身を順番に取り出す際に、「1から始まる通し番号」も一緒に付けてくれる便利な機能です。

5. 機能の実装 (3) - タスクの削除 (`pop`)

done コマンドが入力された時が、一番の腕の見せ所です。ユーザーが指定した番号のタスクをリストから削除します。


# elif command == "done": の中身
done_index_str = input("完了にするタスクの番号を入力してください: ")
done_index = int(done_index_str) - 1 # ユーザー入力は1から、リストは0から
removed_task = todos.pop(done_index)
print(f"タスク「{removed_task}」を完了しました。")
        

💡【超重要】Pythonのインデックスは「0」から始まる!
これが初心者が最もつまずくポイントです。人間はモノを数える時「1, 2, 3...」と数えますが、Pythonのリストは「0番目, 1番目, 2番目...」と数えます。 そのため、ユーザーが「1番目のタスク」を指定したら、プログラム内部では「0番目の要素」を操作する必要があります。だから int(done_index_str) - 1 のように -1 をしているのです。これはSEOの本質である「ユーザー(人間)とクローラ(機械)の橋渡し」の考え方にも通じますね!

todos.pop(done_index) は、リストの指定した場所(インデックス)の要素を削除し、同時にその要素を返してくれる便利なメソッドです。

まとめ

お疲れ様でした!実用的なToDoリストアプリを通して、Pythonにおける最も基本的なデータ構造「リスト」の扱い方を学びました。

  • 空のリストを [] で作り、
  • .append() で要素を追加し、
  • for と enumerate で中身を順番に見て、
  • .pop() で指定した場所の要素を削除する。

この4つの操作は、今後あなたがどんなプログラムを作る上でも必ず使うことになる、まさに「基本のキ」です。 ぜひ、このアプリをベースに「タスクをファイルに保存する機能」や「タスクを編集する機能」などを追加して、あなただけのオリジナルアプリに改造してみてください!

プログラミング学習に必須ツール!

記事で紹介したコードがよく分からなかったり、ご自身のコードについてもっと知りたい場合は、AIコード解説ツールが便利です。コードを貼り付けるだけで、AIが日本語で分かりやすく解説します。

AIコード解説ツールを使ってみる →

この記事を書いた人

ハンドルネーム:雲海 墨汁(うんかい ぼくじゅ)

プログラミング独学で挫折後、上京しWeb系企業に就職。4年間、主にバックエンド開発に従事し、
大規模サービスの設計から運用までを経験。
現在は、自身の学習経験を活かし、初心者向けのツール開発に情熱を注いでいる。

詳しいプロフィールを見る →
← ブログ一覧に戻る
このサイトについて ブログ 特定商取引法に基づく表記 プライバシーポリシー
© 2025 株式会社Serchcode . All Rights Reserved.