コース一覧
    Pythonクラス・総合制作
    自由拡張

    Pythonクラス・総合制作

    クラスと総合制作を学び、Pythonの知識を組み合わせた小さなプログラムを完成できるようにします。

    1
    クラス入門
    01. クラス定義15分
    02. __init__とインスタンス変数15分
    03. メソッド15分
    04. __str__15分
    05. クラス変数15分
    06. dataclass15分
    07. オブジェクトと内包表記15分
    08. つくる クラスベース化20分
    09. 第7章クイズ10分
    2
    総合制作
    01. パッケージ構成に整理20分
    02. 月次レポートv220分
    03. 動作チェックスクリプト20分
    04. 自由拡張20分
    05. 完成と次のステップ10分

    自由拡張

    このレッスンでできるようになること

    家計簿に自分で欲しい機能を1つ足すときの、決め方と組み立て方が身に付きます。ここでは予算アラートを題材にします。

    まず「何を入れて何が出るか」を決めます

    機能を足したくなったとき、いきなりコードを書き始めると手が止まります。先に決めるのは次の2つです。

    • 入力 — その機能は何を受け取るのか
    • 出力 — 何を返すのか。表示するのか、値を返すのか

    今回の予算アラートなら、入力は「支出のリスト」と「カテゴリごとの予算」の2つ、出力は「予算を超えたカテゴリの警告文のリスト」です。これが決まれば、あとは中を埋めるだけになります。

    Python

    def budget_alerts(expenses, budgets):
        ...

    budgets はカテゴリ名から金額への辞書にします。{"食費": 30000, "交通費": 5000} のような形です。

    表示ではなく値を返します

    ここで print してしまいたくなりますが、我慢してリストを返す形にします。値を返しておくと、画面に出すことも、ファイルに書くことも、件数だけ数えることも、呼ぶ側で選べます。第7章までのレポート関数を全部この形にしてきたのと同じ理由です。

    そして値を返す関数は、前のレッスンで書いたチェックスクリプトで assert できます。print する関数は目で見るしかありません。

    中身はここまでの道具だけです

    集計は第2章の Counter、絞り込みは第3章の内包表記、並べ替えは第4章の sorted と key です。

    Python

    overs = [
        (category, totals[category] - limit)
        for category, limit in budgets.items()
        if totals[category] > limit
    ]

    budgets.items() を回しているのがポイントです。支出のほうを回すと、予算を決めていないカテゴリまで対象になってしまいます。予算を決めたカテゴリだけを見たいので、予算の辞書を主役にします。

    totals[category] は Counter なので、そのカテゴリの支出が1件も無くても 0 が返ります。第2章で defaultdict と Counter を学んだときの、KeyError を出さない性質がここで効きます。

    並び順を決めておきます

    超過額の大きい順に並べます。同じ超過額のときはカテゴリ名の昇順にして、いつ動かしても同じ順になるようにします。

    Python

    overs.sort(key=lambda pair: (-pair[1], pair[0]))

    あとは1行ずつの文にするだけです。ここまで、新しい文法は1つも出てきていません。7章ぶんの道具で、新しい機能が1つ増えました。

    要件

    1. budget_alerts(expenses, budgets) は文字列のリストを返す
    2. budgets は カテゴリ名 から 予算額 への辞書とする
    3. 予算が決められているカテゴリだけを対象にする。予算に無いカテゴリは無視する
    4. 支出の合計が予算を超えたときだけ警告する。ちょうど同額のときは警告しない
    5. 警告文は 食費 は予算を1050円超えています の形にする
    6. 超過額の大きい順に並べる。同じ超過額のときはカテゴリ名の昇順にする
    7. 超過が1件も無いときは空のリストを返す

    ヒント

    カテゴリ別の合計は Counter で作ると、支出が無いカテゴリでも 0 が返って安全です

    回すのは支出ではなく budgets.items() のほうです

    並べ替えは key=lambda pair: (-pair[1], pair[0]) で超過額の降順と名前の昇順を両立できます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • 完成と次のステップ

      作ったものを振り返り、次に進む道を見通します。

    • 動作チェックスクリプト

      assert で主要機能の確認を自動化します。

    • 月次レポートv2

      カテゴリ別と前月比を出すレポートを、中級の道具で作ります。

    • パッケージ構成に整理

      models と report に分け、実務で見かける構成に整えます。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • リスト順序付きで複数の値を扱うデータ構造
    • 関数処理に名前を付けて再利用できる単位
    • 内包表記for と if を 1 行で書く構文
    main.py
    エディタを読み込んでいます

    メモ

    自由拡張

    ⌘S で保存