つくる:入力できるおこづかい帳
決め打ちのレシートは、1 回しか役に立たない
第 1 章の最後に作った make_receipt は、引数を取らず、いつ呼んでも同じ 4 行を返す関数でした。あのときは変数も型変換も持っていなかったので、全部を決め打ちにするしかありませんでした。
第 2 章の総仕上げとして、これを make_receipt(name, price) に作り替えます。品名と金額を外から受け取り、その値でレシートを組み立てます。行の構成も変わります。
Python
=== おこづかい帳 ===
りんご 120円
合計 120円見出し、品物 1 行、合計の 3 行です。受け取るのが 1 件ぶんなので、品物の行も 1 行になりました。品物が 1 件しかないので、合計は金額そのものです。第 1 章では 120 + 80 を人が計算して 200 と書いていましたが、今回は計算そのものが要りません。同じ値を 2 か所で使うだけです。
複数行も f-string でまとめられる
\n は f-string の中でも改行として働くので、行をまたいだ組み立てもこの形で書けます。
Python
day = "月曜"
count = 2
print(f"--- {day} ---\n記録 {count}件")画面には 2 行で出ます。第 1 章の + だらけの書き方と見比べると、どこに何が入るのかが一目で分かるようになりました。使った道具は、変数と f-string の 2 つだけです。
行が増えてきたら、行ごとに変数へ入れてから最後にまとめても構いません。1 本の式に押し込むか分けるかは、読みやすいほうを選んでください。
金額を数値で持つ理由
make_receipt に渡す price は数値です。文字列のまま渡しても、f-string なら表示だけはできてしまいます。それでも数値で持つのには理由があります。
このあと、合計と予算を見比べて予算オーバーかどうかを判定する処理を足していきます。比べるには数値である必要があります。"1200" と "800" を文字として比べると、辞書の並び順で比較されて、金額の大小とは違う答えが出てしまいます。表示は最後の一瞬だけ、それまではずっと数値で持つ。この方針を今のうちに固めておいてください。
やってみよう
関数 make_receipt を実装してください。引数は品名 name と数値の金額 price の 2 つです。
1 行目は === おこづかい帳 ===、2 行目は品名と金額、3 行目は 合計 のあとに金額です。3 つの行を \n でつなぎ、末尾に改行は付けません。make_receipt("りんご", 120) なら上の 3 行、make_receipt("ノート", 0) なら合計の行も 合計 0円 になります。
品物の行と合計の行は、金額が同じでも別の行として用意してください。
要件
- 関数名は make_receipt で、引数は name と price の2つ
- 1行目は "= おこづかい帳 ="、2行目は "品名 金額円"、3行目は "合計 金額円"
- 行の区切りは \n を使い、末尾には改行を付けない
- 金額は数値で渡ってくるので f-string か str で文字列にする