Python | 1 日 60 分 × 7 日アプリ学習:Python文法を学ぶアプリ TODOリスト編

Web APP Python
スポンサーリンク
スポンサーリンク

1日目のゴールと全体像

TODOリストアプリ 1日目のテーマは 「Pythonの基本文法だけで“メモ程度のTODOリスト”を作ること」 です。

この日はまだ複雑な機能は入れず、まずは

  • 変数で「やること」を覚える
  • 繰り返しで「複数のTODO」を扱う
  • 条件分岐で「終了するかどうか」を決める
  • 関数で「処理のまとまり」を作る
  • ファイル操作の“入口”として、簡単な保存を体験する

という流れで、「動くTODOリストの最初の形」 を作っていきます。

TODOリストの基本アイデア

TODOリストの仕組みは、とてもシンプルです。

  1. ユーザーが「やること」を入力する
  2. 入力された「やること」をどこかに保存しておく
  3. 最後に一覧として表示する
  4. できればファイルにも保存しておく

この「どこかに保存しておく」が、 Pythonでは 変数やリスト の出番になります。

1つのTODOを変数に入れてみる

まずは「やること」を1つだけ扱ってみます。

todo = input("今日やることを1つ入力してください:")
print("あなたのTODO:", todo)
Python

深掘りポイント

  • input() はユーザーから文字列を受け取る
  • 受け取った値を todo という変数に入れておくことで、後から使える
  • print() で確認することで、「変数に入った」感覚がつかめる

ここまでは「1つだけのTODOメモ」です。 1日目の本番は、ここから 複数のTODOを扱う ところです。

複数のTODOをリストで管理する

TODOリストは、名前の通り「リスト」がぴったりです。

todos = []  # TODOを入れていくための空のリスト
Python

ここに、ユーザーが入力した「やること」を追加していきます。

todo = input("今日やることを1つ入力してください:")
todos.append(todo)  # リストに追加
Python

深掘りポイント

  • リストは「複数の値をまとめて扱う箱」
  • append() は「リストの末尾に追加する」メソッド
  • TODOリストアプリでは、リストが主役になる

繰り返しで「何件でも」TODOを追加できるようにする

1件だけではなく、ユーザーが「もう1件」「もう1件」と 続けて入力できるようにしたいですよね。

そこで 繰り返し条件分岐 を組み合わせます。

シンプルなループの形

todos = []

while True:
    todo = input("TODOを入力してください(終了したいときは空のままEnter):")

    if todo == "":  # 何も入力されなかったら終了
        break

    todos.append(todo)

print("=== 今日のTODO一覧 ===")
for t in todos:
    print("-", t)
Python

深掘りポイント

  • while True: は「ずっと繰り返す」
  • if todo == "": break で「空入力なら終了」という条件分岐
  • for t in todos: で「リストの中身を1つずつ取り出して表示」

この時点で、すでに 「簡単なTODOリストアプリ」 が完成しています。

関数にまとめて「部品化」する

1日目から「関数」を意識しておくと、 後の拡張がとても楽になります。

設計

  • 関数名:input_todos
  • 役割:ユーザーからTODOを受け取り、リストとして返す
def input_todos():
    """ユーザーからTODOを入力してもらい、リストで返す関数"""
    todos = []

    while True:
        todo = input("TODOを入力してください(終了したいときは空のままEnter):")

        if todo == "":  # 空なら終了
            break

        todos.append(todo)

    return todos
Python

深掘りポイント

  • 関数は「処理のまとまり」
  • return todos で、関数の外に結果を渡す
  • 後で「表示」「保存」などを別の関数に分けやすくなる

TODO一覧を表示する関数

表示も関数にしておくと、 「表示方法を変えたい」ときに楽です。

def show_todos(todos):
    """TODOリストをきれいに表示する関数"""
    print("=== 今日のTODO一覧 ===")

    if not todos:  # リストが空ならメッセージだけ表示
        print("TODOは登録されていません。")
        return

    for t in todos:
        print("-", t)
Python

深掘りポイント

  • if not todos: は「リストが空かどうか」をチェックする条件分岐
  • 繰り返しで1件ずつ表示することで、見やすい一覧になる

ファイル操作の“入口”:TODOを簡単に保存してみる

1日目では、ファイル操作は「軽く触る」程度にします。 「今日のTODOをテキストファイルに書き出す」 だけでも、 かなり実用的になります。

def save_todos_to_file(todos, file_path="todos.txt"):
    """TODOリストをファイルに保存する関数"""
    with open(file_path, "w", encoding="utf-8") as f:
        for t in todos:
            f.write(t + "\n")  # 1行に1つずつ書き込む

    print(f"TODOを {file_path} に保存しました。")
Python

深掘りポイント

  • "w" モードは「上書き保存」
  • for t in todos: でリストの中身を1件ずつ書き込む
  • \n を付けることで、1行1TODOになる

1日目では「読み込み」はまだ扱わず、 「書き出せるようになった」 ことを大事にします。

1日目の完成コード:シンプルTODOリストアプリ

ここまでの要素を全部つなげると、 1日目の完成版はこんな形になります。

import os  # 今日はほぼ使わないが、後日の拡張で使える

def input_todos():
    """ユーザーからTODOを入力してもらい、リストで返す関数"""
    todos = []

    while True:
        todo = input("TODOを入力してください(終了したいときは空のままEnter):")

        # 条件分岐:空なら入力終了
        if todo == "":
            break

        todos.append(todo)  # リストに追加

    return todos

def show_todos(todos):
    """TODOリストをきれいに表示する関数"""
    print("=== 今日のTODO一覧 ===")

    # 条件分岐:何も登録されていない場合
    if not todos:
        print("TODOは登録されていません。")
        return

    # 繰り返し:1件ずつ表示
    for t in todos:
        print("-", t)

def save_todos_to_file(todos, file_path="todos.txt"):
    """TODOリストをファイルに保存する関数"""
    with open(file_path, "w", encoding="utf-8") as f:
        for t in todos:
            f.write(t + "\n")  # 1行に1つずつ書き込む

    print(f"TODOを {file_path} に保存しました。")

def main():
    """アプリ全体の流れをまとめた関数"""
    print("=== TODOリストアプリ 1日目 ===")

    # TODOを入力
    todos = input_todos()

    # TODOを表示
    show_todos(todos)

    # ファイルに保存するかどうかを聞く(条件分岐)
    answer = input("TODOをファイルに保存しますか?(y/n):")

    if answer == "y":
        save_todos_to_file(todos)
    else:
        print("保存せずに終了します。")

if __name__ == "__main__":
    main()
Python

コードの重要ポイントを深掘り

1. 変数は「値を覚えておく箱」

  • todos:TODOの一覧
  • todo:1件分のTODO
  • answer:保存するかどうかのユーザーの選択

これらはすべて「後で使うために値を覚えておく」ための変数です。

2. 条件分岐で「流れ」をコントロールする

  • if todo == "": break → 入力を終えるタイミングを決める
  • if not todos: → TODOが1件もないときの表示を変える
  • if answer == "y": → 保存するかどうかをユーザーに委ねる

条件分岐は、 「ユーザーの入力や状態に応じて、アプリの挙動を変える」 ための基本です。

3. 繰り返しで「複数のもの」を扱う

  • while True: で「何件でも入力できる」
  • for t in todos: で「複数のTODOを1件ずつ表示・保存する」

TODOリストのような「複数データ」を扱うアプリでは、 繰り返しが必須になります。

4. 関数で「役割ごとに分ける」

  • input_todos:入力担当
  • show_todos:表示担当
  • save_todos_to_file:保存担当
  • main:全体の流れ担当

この分割ができると、 「どこを直せば何が変わるか」 がとてもわかりやすくなります。

5. ファイル操作は「外部世界との橋」

1日目では「書く」だけですが、 それでもアプリは一気に実用的になります。

  • 画面に表示するだけ → 一時的
  • ファイルに保存する → 後から見返せる

この違いは大きいです。

1日目で本当に掴んでほしいこと

● 「動くものを作る」感覚

自分が入力したTODOが

  • 画面に一覧表示されて
  • ファイルにも保存される

この体験は、 「Pythonで何かを作る」 感覚をつかむうえで、とても大事です。

● 文法は「アプリの中で使ってこそ身につく」

  • 変数
  • 条件分岐
  • 繰り返し
  • 関数
  • ファイル操作

これらは、単体で覚えるよりも 「TODOリストアプリの中で使う」 ほうが、ずっと記憶に残ります。

次のステップ

2日目以降では、このTODOリストをさらに育てていきます。

  • 2日目:番号付きで表示して「削除」や「完了」を扱う(条件分岐・繰り返しの強化)
  • 3日目:ファイルから読み込んで「前回のTODO」を復元する(ファイル操作の強化)
  • 4日目:関数を整理して「メニュー付きアプリ」にする
  • 5〜7日目:設定ファイル・ログ・完了フラグなどを追加して「本格的なTODO管理ツール」に近づける

1日目のこのコードを、 ぜひ自分の手で打ち込んで、少しずつ改造してみてください。 そこから先が、いちばん面白いところです。

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