Python | 1 日 60 分 × 7 日アプリ学習:Python文法を学ぶアプリ 家計簿編

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

家計簿アプリ 3日目のゴール

3日目のテーマは 「登録した支出を“検索できる家計簿アプリ”へ進化させ、変数・条件分岐・繰り返し・関数・ファイル操作をより実践的に使えるようになること」 です。

ここまでで、家計簿アプリは

  • 支出を登録する
  • ファイルに保存する
  • 一覧表示する
  • メニュー形式で操作する

という「基本的な家計簿アプリ」になりました。

3日目ではここに 検索機能(項目検索・日付検索・金額検索) を追加し、 「必要な支出をすぐ探せる家計簿アプリ」へ育てていきます。

検索は 繰り返し+条件分岐+文字列処理+ファイル操作 の総合練習です。

家計簿ファイルの構造を確認する

2日目までの保存形式は次のようになっています。

==== 支出 ====
項目: 食費
金額: 1200
日付: 2026-08-08

==== 支出 ====
項目: 交通費
金額: 500
日付: 2026-08-08

この構造を利用して検索機能を作ります。

ファイルを行ごとに読み込む関数

検索機能の土台として、 まずはファイルを行ごとに読み込む関数を作ります。

def load_expense_lines():
    """
    kakeibo.txt を行ごとのリストとして読み込む関数
    """
    try:
        with open("kakeibo.txt", "r", encoding="utf-8") as f:
            return f.readlines()
    except FileNotFoundError:
        print("まだ支出がありません。まずは登録してみましょう。")
        return []
Python

深掘りポイント

  • readlines() は「行のリスト」を返す
  • ファイルがない場合は空リストを返すことでアプリが落ちない
  • 検索機能はこの「行のリスト」を使って実現する

項目で検索する機能

項目検索は、 「行の中に 項目: があり、そこに検索したい文字が含まれているか」 を調べることで実現できます。

def search_by_item():
    """
    項目で支出を検索する機能
    """
    keyword = input("検索したい項目を入力してください: ")

    lines = load_expense_lines()

    if not lines:
        return

    print(f"=== 項目に「{keyword}」を含む支出 ===")

    found = False
    current_entry = []

    for line in lines:
        if line.startswith("==== 支出 ===="):
            current_entry = []
        elif line.strip() == "":
            for entry_line in current_entry:
                if entry_line.startswith("項目:") and keyword in entry_line:
                    print("".join(current_entry))
                    print("------------------------------")
                    found = True
            current_entry = []
        else:
            current_entry.append(line)

    if not found:
        print("該当する支出は見つかりませんでした。")
Python

深掘りポイント

  • current_entry は「1件分の支出」をまとめるためのリスト
  • 空行が来たら「1件分の終わり」とみなす
  • 項目行に keyword が含まれているかをチェック
  • 見つかったらその支出だけ表示

検索機能は 繰り返し+条件分岐+文字列処理 の総合練習です。

日付で検索する機能

日付検索は項目検索とほぼ同じ構造です。

def search_by_date():
    """
    日付で支出を検索する機能
    """
    keyword = input("検索したい日付を入力してください(例:2026-08-08): ")

    lines = load_expense_lines()

    if not lines:
        return

    print(f"=== 日付が「{keyword}」の支出 ===")

    found = False
    current_entry = []

    for line in lines:
        if line.startswith("==== 支出 ===="):
            current_entry = []
        elif line.strip() == "":
            for entry_line in current_entry:
                if entry_line.startswith("日付:") and keyword in entry_line:
                    print("".join(current_entry))
                    print("------------------------------")
                    found = True
            current_entry = []
        else:
            current_entry.append(line)

    if not found:
        print("該当する支出は見つかりませんでした。")
Python

金額で検索する機能

金額検索は「部分一致」でも「完全一致」でも使えます。

def search_by_amount():
    """
    金額で支出を検索する機能
    """
    keyword = input("検索したい金額を入力してください: ")

    lines = load_expense_lines()

    if not lines:
        return

    print(f"=== 金額が「{keyword}」を含む支出 ===")

    found = False
    current_entry = []

    for line in lines:
        if line.startswith("==== 支出 ===="):
            current_entry = []
        elif line.strip() == "":
            for entry_line in current_entry:
                if entry_line.startswith("金額:") and keyword in entry_line:
                    print("".join(current_entry))
                    print("------------------------------")
                    found = True
            current_entry = []
        else:
            current_entry.append(line)

    if not found:
        print("該当する支出は見つかりませんでした。")
Python

メニューに検索機能を追加する

def show_menu():
    print("------------------------------")
    print("Python 家計簿アプリ 3日目 メニュー")
    print("1: 支出を登録する")
    print("2: 支出を一覧表示する")
    print("3: 項目で検索する")
    print("4: 日付で検索する")
    print("5: 金額で検索する")
    print("6: 終了する")
    print("------------------------------")
Python

main に検索機能を追加する

def main():
    print("Python 家計簿アプリ 3日目")
    print("支出を登録・表示・検索できるようにしていきます。")

    while True:
        show_menu()
        choice = input("番号を入力してください(1〜6): ")

        if choice == "1":
            add_expense()
        elif choice == "2":
            show_all_expenses()
        elif choice == "3":
            search_by_item()
        elif choice == "4":
            search_by_date()
        elif choice == "5":
            search_by_amount()
        elif choice == "6":
            print("家計簿アプリを終了します。おつかれさまでした。")
            break
        else:
            print("1〜6 のいずれかを入力してください。")
Python

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

● 検索は「繰り返し+条件分岐+文字列処理」の応用

  • 行を1つずつ見る
  • パターンを見つける
  • 条件に合うものだけ表示する

この流れは、どんな検索機能でも使われます。

● 家計簿のような「複数件のデータ」は“1件分をまとめる”ことが大事

  • current_entry のような「1件分の箱」を作る
  • 空行で区切る
  • パターンを見つけて処理する

これが「テキストデータを扱う基本」です。

● 関数を増やすとアプリが“機能の集合”として見えてくる

  • search_by_item()
  • search_by_date()
  • search_by_amount()

機能ごとに関数を分けることで、 アプリが整理されて理解しやすくなります。

次のステップ(4日目の予告)

4日目では、家計簿アプリをさらに育てて、

  • 金額順に並び替える
  • 日付順に並び替える
  • 項目順に並び替える

という「並び替え機能」を追加しながら、 繰り返し・条件分岐・文字列処理・ファイル操作・リスト操作 をさらに深めていきます。

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