コース一覧
    Pythonループ・関数
    つくる:関数に分割

    Pythonループ・関数

    ループと関数の基本を学び、繰り返し処理を分割して読みやすく書けるようにします。

    1
    ループ
    01. forで合計15分
    02. whileで繰り返す15分
    03. rangeとstep15分
    04. breakとcontinue15分
    05. enumerateで番号付け15分
    06. zipで組み合わせ15分
    07. 入れ子ループ15分
    08. つくる:何件でも記録15分
    09. 第5章クイズ10分
    2
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. デフォルト引数15分
    04. キーワード引数15分
    05. 複数の戻り値15分
    06. divmod15分
    07. 変数のスコープ15分
    08. lambda関数15分
    09. つくる:関数に分割15分
    10. 第6章クイズ10分

    つくる:関数に分割

    文字列で返すと、表示を変えるたびに中を直すことになる

    第 1 章から第 5 章までに、おこづかい帳の部品はもう出そろっています。レシートの 1 行を作る関数、予算と比べる関数、品名からカテゴリを決める関数、記録を一覧にする関数。この章で学んだのは、それらを役割ごとにきちんと分けるための道具でした。

    仕上げに作るのは、記録の一覧と予算を受け取って、知りたい数字をまとめて返す関数です。ここで返すのは文字列ではなく 辞書 にします。

    理由は、受け取った側が好きな形に組み立て直せるからです。文字列で返してしまうと、画面の表示を変えたいときに関数の中の計算まで直しに行くことになります。数字を出す関数と、それを文にする関数は分けておきます。

    キーは 4 つで固定

    辞書は中かっこで作り、キーと値を組にして並べます。

    Python

    def measure(text):
        return {"length": len(text), "empty": text == ""}
    
    print(measure("りんご"))
    print(measure("")["empty"])

    {'length': 3, 'empty': False} と True が出ます。作るときは中かっこ、取り出すときは角かっこにキーの名前です。値には数値でも文字列でも真偽値でも入れられます。

    今回のキーは count total remaining over の 4 つで固定です。1 つでも綴りが違うと、受け取る側が取り出せません。残額は budget - total で、使いすぎたときは負の数になります。-500 という値がそのまま「500 円の使いすぎ」を表すので、これで困りません。

    over には True か False の真偽値を入れます。"オーバー" のような文字列ではありません。判定結果は真偽値で返し、言葉にするのは表示側の仕事です。ちょうど予算どおりのときを False にするのは check_over で決めた仕様と同じで、章をまたいで判定がぶれないようにしています。

    解説

    1 つの関数が短く、名前を見れば役割が分かる。この状態を保てているうちは、機能をいくつ足しても手に負えなくなりません。

    0 件でも自然に正しい答えが出るか

    記録が 0 件のとき、for は 1 度も回らないので合計は初期値の 0 のままです。件数も 0、残額は予算そのもの、over は False になります。

    つまり空のときのための場合分けを書かなくても、正しい答えが出ます。書き終わったら空のリストを渡してみて、特別扱いなしで通るか を必ず確かめてください。ここで場合分けが要るなら、どこかの初期値が間違っています。

    合計を作る前に入れ物を 0 で用意するのを忘れると NameError です。章が変わっても、この手順は変わりません。

    やってみよう

    関数 summarize(records, budget) を実装してください。支出のリスト records と予算 budget を受け取り、下記の 4 つのキーを持つ辞書を return します。

    count は件数、total は金額の合計、remaining は budget - total、over は合計が予算を超えていれば True、そうでなければ False です。

    records が空のリストのときは、count と total が 0、remaining が budget の値、over が False になります。

    要件

    1. 関数名は summarize で、引数は records と budget の 2 つ
    2. 戻り値は count / total / remaining / over の 4 つのキーを持つ辞書
    3. remaining は budget - total で、負の数になってよい
    4. over は total > budget の結果の True か False にする

    ヒント

    件数は len(records) で求まります

    合計は total = 0 から始めて for で record["price"] を足していきます

    辞書は {"count": ..., "total": ...} の形で作ります

    空のリストのときは for が 1 度も回らないので、total は 0 のままになります

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

    関連レッスン

    • 第6章クイズ

      関数の定義と呼び出し、デフォルト引数、複数の戻り値、スコープ、lambda を5問で確認する

    • lambda関数

      名前のない小さな関数を式で書く。sorted の key に渡して金額順に並べ替える

    • 変数のスコープ

      ローカル変数とグローバル変数の違い。外を書き換えるバグを引数と戻り値の形に直す

    • divmod

      divmod で商と余りを 1 回の呼び出しで得る。割り勘の結果を返す split_even を作る

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

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

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

    メモ

    つくる:関数に分割

    ⌘S で保存