家計簿アプリ 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("------------------------------")
Pythonmain に検索機能を追加する
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 のいずれかを入力してください。")
Python3日目で本当に掴んでほしいこと
● 検索は「繰り返し+条件分岐+文字列処理」の応用
- 行を1つずつ見る
- パターンを見つける
- 条件に合うものだけ表示する
この流れは、どんな検索機能でも使われます。
● 家計簿のような「複数件のデータ」は“1件分をまとめる”ことが大事
current_entryのような「1件分の箱」を作る- 空行で区切る
- パターンを見つけて処理する
これが「テキストデータを扱う基本」です。
● 関数を増やすとアプリが“機能の集合”として見えてくる
search_by_item()search_by_date()search_by_amount()
機能ごとに関数を分けることで、 アプリが整理されて理解しやすくなります。
次のステップ(4日目の予告)
4日目では、家計簿アプリをさらに育てて、
- 金額順に並び替える
- 日付順に並び替える
- 項目順に並び替える
という「並び替え機能」を追加しながら、 繰り返し・条件分岐・文字列処理・ファイル操作・リスト操作 をさらに深めていきます。


