f-string
プラスとクオートと str が入り混じって読めない
前回の書き方は、動くのですが読みにくい形をしています。
Python
print("記録は " + str(count) + " 件です")クオートが 4 つ、+ が 2 つ、str が 1 つ。できあがりがどんな文字列なのかを、頭の中で組み立て直さないと分かりません。半角スペースがどこに入るのかも " " を探さないと見えません。
Python にはもっと素直な書き方があります。f-string です。クオートの前に f を付け、埋め込みたい場所を波かっこ {} で囲みます。
Python
count = 3
print(f"記録は {count} 件です")記録は 3 件です と出ます。かっこの外に書いた文字は、そのままの位置に残ります。できあがりの形がそのままコードに見えているのが、f-string のいちばんの価値です。読む人が頭の中で連結を組み立てなくて済みます。
str がいらなくなる
{} の中の値は、自動で文字列に変換されてから埋め込まれます。数値をそのまま書いても TypeError になりません。
中には式も書けます。かっこの中が先に計算され、その結果が埋め込まれます。
Python
budget = 3000
print(f"2 か月ぶんで {budget * 2}円")2 か月ぶんで 6000円 と出ます。\n も f-string の中で改行として働くので、複数行の文字列もこの形で組み立てられます。
f を忘れると、静かに壊れる
先頭の f を書き忘れると、埋め込みは起きません。"{count} 件" は {count} 件 という文字そのものになります。エラーが出ないので気づきにくく、表示を見て初めて分かります。波かっこがそのまま出てきたら、まず f があるかを見てください。
波かっこの中の変数名にクオートは付けません。f"{'count'}" と書くと、変数の中身ではなく count という文字が入ります。
+での連結が悪いわけではありません。ただ、埋め込む値が 2 つ以上になったら f-string のほうが読みやすくなります。おこづかい帳では以降ずっとこちらを使います。
やってみよう
関数 receipt_line を実装してください。引数は品名 name と数値の金額 price の 2 つで、f-string を使って りんご 120円 の形の文字列を返します。
receipt_line("りんご", 120) なら りんご 120円、receipt_line("ノート", 0) なら ノート 0円 です。品名と金額の間は半角スペース 1 つ、末尾は 円 です。詰めて書くと りんご120円 になってしまうので、空白は自分で置いてください。
+ と str でも同じ結果は出せますが、ここでは f-string で書いてみてください。この 1 行は、このあとのおこづかい帳でずっと使い回す形になります。
要件
- 関数名は receipt_line で、引数は name と price の2つ
- f-string を使って値を埋め込む
- 品名と金額の間には半角スペースを1つだけ入れる
- 末尾に「円」を付けた文字列を return する
入出力例
receipt_line("りんご", 120) → "りんご 120円"
receipt_line("牛乳", 198) → "牛乳 198円"
receipt_line("ノート", 0) → "ノート 0円"
receipt_line("チョコレートアイス", 1200) → "チョコレートアイス 1200円"
receipt_line("", 50) → " 50円"