コース一覧
    Pythonファイル・エラー・制作
    全機能を統合しよう

    Pythonファイル・エラー・制作

    ファイル操作と例外処理を学び、入出力を含む小さなPython制作を安全に進められるようにします。

    1
    ファイルとエラー処理
    01. ファイルを読み込む15分
    02. ファイルに書き込む15分
    03. withで安全に扱う15分
    04. CSV形式で保存15分
    05. try-exceptで備える15分
    06. 例外の種類15分
    07. つくる:保存機能15分
    08. 第8章クイズ10分
    2
    総合制作
    01. 全機能を統合しよう15分
    02. 月間レポート機能15分
    03. 自由拡張15分
    04. 完成と次のステップ10分

    全機能を統合しよう

    どこから手を付けるか

    ここからは総合制作です。新しい文法はもう出てきません。これまでに書いてきた関数をつなぎ直して、1 つのアプリとして動かします。

    本物のメニューなら、while True で回しながら input() で番号を受け取り、打たれた番号で処理を振り分けます。ただし採点環境にはキーボードがつながっていないので、input() は使えません。そこで、打ち込まれるはずだった操作をあらかじめリストにして引数で渡す 形にします。

    やっていることは同じです。input() から 1 行ずつ受け取る代わりに、リストから 1 つずつ取り出すだけの違いで、ループの中身は変わりません。外から来る値を引数で受け取る形にしておくと動作を確かめられる、というのは実務でも同じです。

    コマンドは「操作名 + 必要な値」のリストで、3 種類だけ使います。

    Python

    ["add", "りんご", 120, "食費"]
    ["delete", "りんご"]
    ["summary"]

    add は 1 件追加、delete は品名が一致する記録を 1 件だけ削除、summary は集計を見せるだけで記録を変えません。知らない操作名が来ても落とさずに無視します。

    戻り値は最後の状態をまとめた辞書で、キーは 3 つに固定します。

    Python

    {"records": [{"name": "りんご", "price": 120, "category": "食費"}], "count": 1, "total": 120}

    1 つずつ足して、そのつど確かめる

    全部をいっぺんに書こうとすると、どこで間違えたのか分からなくなります。順番はこうします。

    まず add だけを処理して、記録が 1 件増えることを確かめます。次に空のコマンド列を渡し、records が空リスト、count と total が 0 で返ることを見ます。ここまでで骨組みができます。

    そのうえで delete を足します。品名が一致する記録を 1 件だけ消す仕様なので、同じ品名が 2 件あるデータで試すのが要です。最後に、知らない操作名や summary を混ぜても落ちないことを確かめます。カテゴリが空文字のときに "その他" へ置き換わるかも、ここで見ておきます。

    つまずくのは、たいてい 3 か所

    1 つ目は、操作名より先に値を取り出してしまうことです。["summary"] は要素が 1 つしかないので、いきなり 2 番目を読むと IndexError になります。操作名で分岐したあと、その枝の中で取り出します。

    2 つ目は、削除で全部消してしまうことです。同じ品名が 2 件あるとき、消し続ければ両方消えます。1 件だけ消すなら、消した時点でその探索を打ち切ります。

    3 つ目は、合計を追加のたびに作り直すことです。delete が入るとずれます。全部のコマンドを処理し終えてから、残った記録を数えるほうが確実です。件数は自分で数えなくても len が返してくれます。

    やってみよう

    関数 run_kakeibo(commands) を実装してください。commands はコマンドのリストです。

    add で記録を 1 件追加し、delete で品名が一致する記録を 1 件だけ消し、summary と知らない操作は何もしません。カテゴリが空文字のときは "その他" にします。最後に {"records": 記録のリスト, "count": 件数, "total": 合計金額} の辞書を返します。空のコマンド列なら records は空リスト、count と total は 0 です。

    要件

    1. 関数名は run_kakeibo で、引数はコマンドのリスト commands 1つだけ
    2. add は {"name": 品名, "price": 金額, "category": カテゴリ} を1件追加する
    3. delete は品名が一致する記録を1件だけ消す。該当がなければ何もしない
    4. summary と知らない操作名は何もしない。エラーにもしない
    5. カテゴリが空文字のときは その他 に置き換える
    6. 戻り値は records と count と total の3つのキーを持つ辞書にする

    ヒント

    for command in commands: で1つずつ取り出し、command[0] で操作名を見ます

    command[1] などの値は、操作名で分岐したあとの枝の中で取り出します

    1件だけ消すには、見つけた時点で remove して break でループを抜けます

    合計はループを抜けたあと、records をもう一度回して足すと確実です

    件数は自分で数えず len(records) を使います

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

    関連レッスン

    • 月間レポート機能

      合計・カテゴリ別・最高額・予算の残りをまとめて辞書で返す monthly_report を作る

    • 自由拡張

      品名の部分一致で支出を探す search_records を作り、その先の拡張の考え方を知る

    • 完成と次のステップ

      手元で動く kakeibo.py の全文を読み、動かし方を確認したうえでコース全体を5問で総復習する

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

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

    • 関数処理に名前を付けて再利用できる単位
    • 処理計算や代入を表す長方形
    • リスト順序付きで複数の値を扱うデータ構造
    • 引数位置引数=順番で渡す。
    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 戻り値呼び出し元への返答を表す点線矢印
    main.py
    エディタを読み込んでいます

    メモ

    全機能を統合しよう

    ⌘S で保存