0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的な備忘録:Python のクラスとオブジェクトを使ってシンプルな家計簿を作り、アウトプットしてみた

Last updated at Posted at 2025-02-05

はじめに

このプログラムは、Python を使って シンプルな家計簿アプリ を実装したものです。

ユーザーが支出を登録し、その合計を計算・確認できるようになっています。

Python の クラス設計リスト操作ループ処理 などの基礎を学ぶのにも適した内容です。

書こうと思ったきっかけ

日常の支出を記録する簡単な仕組みがあれば便利だと考え、Python の オブジェクト指向 を活かして作成してみました。

また、クラスを活用したデータ管理リストを用いた集計処理 を実践的に学ぶ機会としても良い題材だと思い、このプログラムを作成しました。

完成したコード

test.py
class Expense:
    def __init__(self, category, amount):
        self.category = category
        self.amount = amount

class Budget:
    def __init__(self):
        self.expenses = []

    def add_expense(self, category, amount):
        self.expenses.append(Expense(category, amount))

    def total_spent(self):
        return sum(expense.amount for expense in self.expenses)

    def show_expenses(self):
        print("\n=== 家計簿 ===")
        for expense in self.expenses:
            print(f"{expense.category}: ¥{expense.amount}")
        print(f"合計支出: ¥{self.total_spent()}")

budget = Budget()
while True:
    action = input("\n支出を追加(a) / 確認(s) / 終了(q): ").lower()
    if action == "a":
        category = input("カテゴリーを入力してください: ")
        amount = int(input("金額を入力してください: "))
        budget.add_expense(category, amount)
        print("支出を追加しました!")
    elif action == "s":
        budget.show_expenses()
    elif action == "q":
        break
    else:
        print("無効な入力です。")

コードの流れ

このコードは シンプルな家計簿アプリ で、ユーザーが支出を記録し、合計金額を確認できる仕組みになっています。

動作の流れは次のとおりです。

クラスの定義

  • Expense クラス

    • 支出のカテゴリと金額を管理。
  • Budget クラス

    • 家計簿の管理、支出の追加、合計計算、表示を担当。

ユーザーの操作

  • while True ループでユーザーに選択肢を提示。
  • 入力に応じた処理を実行
    • "a"支出を追加(カテゴリと金額を入力し、リストに追加)
    • "s"支出一覧を表示(登録済みの支出と合計金額を表示)
    • "q"プログラムを終了break でループを抜ける)
    • その他無効な入力としてエラーメッセージを表示。

このように、シンプルな操作で 家計簿を管理 できる仕組みになっています。

実際に実行してみる

まず、以下のコマンドを実行して作成したコードの動作を確認します。

python test.py

実行結果

 ~/Desktop ((git)-[main])  python test.py

支出を追加(a) / 確認(s) / 終了(q): a
カテゴリーを入力してください: ラーメン
金額を入力してください: 1200
支出を追加しました!

支出を追加(a) / 確認(s) / 終了(q): a
カテゴリーを入力してください: 牛丼
金額を入力してください: 650
支出を追加しました!

支出を追加(a) / 確認(s) / 終了(q): s

=== 家計簿 ===
ラーメン: ¥1200
牛丼: ¥650
合計支出: ¥1850

支出を追加(a) / 確認(s) / 終了(q):

実際の画面

Screenshot 2025-02-05 at 9.00.14.png

コードの解説

クラスの定義

class Expense:
    def __init__(self, category, amount):
        self.category = category
        self.amount = amount
  • category(カテゴリ)とamount(金額)を管理するクラス。
  • コンストラクタ __init__() で、カテゴリと金額を設定する。
class Budget:
    def __init__(self):
        self.expenses = []
  • 支出データを管理するリスト (self.expenses) を初期化。

家計簿の機能

def add_expense(self, category, amount):
    self.expenses.append(Expense(category, amount))
  • ユーザーが入力したカテゴリと金額を Expense のインスタンスとして追加。
def total_spent(self):
    return sum(expense.amount for expense in self.expenses)
  • 登録された支出の合計金額を計算して返す。
def show_expenses(self):
    print("\n=== 家計簿 ===")
    for expense in self.expenses:
        print(f"{expense.category}: ¥{expense.amount}")
    print(f"合計支出: ¥{self.total_spent()}")
  • 登録された支出一覧と合計金額を表示。

ユーザーの操作

while True:
    action = input("\n支出を追加(a) / 確認(s) / 終了(q): ").lower()
  • 無限ループでユーザーの入力を受け付け、小文字 (.lower()) に統一。
if action == "a":
    category = input("カテゴリーを入力してください: ")
    amount = int(input("金額を入力してください: "))
    budget.add_expense(category, amount)
    print("支出を追加しました!")

カテゴリと金額を入力し、add_expense() でリストに追加。

elif action == "s":
    budget.show_expenses()
  • 支出一覧と合計を表示。
elif action == "q":
    break
  • break でループを抜け、プログラムを終了。
else:
    print("無効な入力です。")
  • asq 以外の入力はエラーメッセージを表示。

まとめ

最後までお読みいただき、ありがとうございました。Python のクラスとオブジェクトを使ってシンプルな家計簿を作ることで、関数の仕組みや活用方法への理解が深まりました。

今後も、このような基礎的な内容を分かりやすく整理し、丁寧にまとめていこうと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?