コース一覧
    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分

    つくる:何件でも記録

    決め打ちの 2 行から抜け出す

    第 1 章のレシートは 2 行が決め打ちでした。第 2 章で品名と金額を受け取れるようになりましたが、それでも 1 件だけです。ループを覚えたので、いよいよ 件数の縛りを外します。

    作るのは、記録の集まりを受け取り、番号付きの一覧と合計を 1 本の文字列にして返す関数です。「何件でも」は、アプリが道具になるための最低条件です。ここを越えると、おこづかい帳として実際に使えるものになります。

    1 件は 3 つの値の組

    支出 1 件は、下記のような 辞書 で表します。

    Python

    record = {"name": "りんご", "price": 120, "category": "食費"}
    print(record["name"])
    print(record["price"])

    りんご と 120 が出ます。品名が name、金額が price、カテゴリが category で、取り出すときは角かっこにキーの名前を書きます。いまは、このキー指定の取り出し方だけ使えれば十分です。

    記録の集まりは、この辞書を並べたリストです。for で 1 件ずつ取り出すと、変数に辞書が 1 つ入ります。番号も欲しいなら enumerate、合計も欲しいなら同じループの中で足し上げます。一覧と合計のために 2 回まわす必要はありません。

    金額は数値なので、行に混ぜるときは str を挟みます。品名とカテゴリは最初から文字列なので、そのままつなげます。

    0 件のときに何を出すか

    出力の形は下記のとおりです。

    プレーンテキスト

    === おこづかい帳 ===
    1. りんご 120円 (食費)
    2. パン 250円 (食費)
    合計 370円

    見出しが 1 行、記録が件数分、最後に合計が 1 行です。番号は 1 から始まり、金額のうしろに半角かっこでカテゴリを添えます。末尾に改行は付けません。

    記録が 1 件もないときは、代わりに 記録がありません の 1 行を入れ、合計は 合計 0円 にします。0 件でもループは静かに 0 周で終わるためエラーは出ず、行が抜けたまま気づかない、というのがありがちです。

    解説

    空のときに何を出すかを決めておくのは、地味ですが大事な設計です。決めていないと、見出しと合計だけの不思議な画面が出ます。

    やってみよう

    関数 show_all(records) を実装してください。引数 records は、name と price と category をキーに持つ辞書が並んだリストです。

    1 行目は === おこづかい帳 ===、続けて 1. りんご 120円 (食費) の形で記録を件数分、最後に 合計 370円 の形で合計を出します。改行 \n でつなぎ、末尾に改行は付けません。

    records が空のリストのときは、見出しの次に 記録がありません を入れ、合計は 合計 0円 にします。かっこは半角、円 は全角です。区切りの半角スペースの数もテストと一致させます。

    要件

    1. 関数名は show_all で、引数はリスト records の1つだけにする
    2. 1行目は "= おこづかい帳 ="、記録行は "1. りんご 120円 (食費)" の形にして 1 から番号を振る
    3. 最後の行は "合計 370円" の形で、全記録の price を足した合計を出す
    4. records が空のときは見出しの次に "記録がありません" を入れ、合計は 0円 にする
    5. 行の区切りは \n を使い、末尾には改行を付けない

    ヒント

    enumerate(records, 1) で番号と記録を同時に取り出せます

    辞書からは record["name"] のようにキーで値を取り出します

    price は数値なので str() で文字列に変えてからつなぎます

    一覧を作りながら同じループの中で total にも足していけば、2回まわす必要はありません

    1件も無かったかどうかは、カウンタを1つ用意して 0 のままかで判定できます

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

    関連レッスン

    • 第5章クイズ

      for と while、range の刻み幅、break と continue の違い、enumerate と zip を5問で確認する

    • 関数を定義する

      def で処理に名前を付け、呼び出して使う。定義と呼び出しの違いを理解する

    • 入れ子ループ

      ループの中にループを書いて九九の表を組み立てる multiplication_table を作る

    • zipで組み合わせ

      zip で品名リストと金額リストを組にし、レシート行に整える pair_lines を作る

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

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

    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 関数処理に名前を付けて再利用できる単位
    • リスト順序付きで複数の値を扱うデータ構造
    • 変数データに名前をつけて参照する仕組み
    • 設計何をどう作るかを決める前工程
    • 引数位置引数=順番で渡す。
    • テストバグを見つける工程
    main.py
    エディタを読み込んでいます

    メモ

    つくる:何件でも記録

    ⌘S で保存