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 のほうが読みやすくなります。おこづかい帳では以降ずっとこちらを使います。
作った文字列を変数に入れる
f-string の結果も文字列なので、変数に保存して + でつなげられます。
Python
weekday = "水曜"
notice = f"次の予定は{weekday}"
print(notice + "です")次の予定は水曜です と表示されます。演習では品名と空白の部分、金額と単位の部分をそれぞれ f-string で作り、最後につないで返してください。空白はどちらか片方に 1 つだけ入れます。
やってみよう
関数 receipt_line を実装してください。引数は品名 name と数値の金額 price の 2 つで、f-string を使って りんご 120円 の形の文字列を返します。
receipt_line("りんご", 120) なら りんご 120円、receipt_line("ノート", 0) なら ノート 0円 です。品名と金額の間は半角スペース 1 つ、末尾は 円 です。詰めて書くと りんご120円 になってしまうので、空白は自分で置いてください。
+ と str でも同じ結果は出せますが、ここでは f-string で書いてみてください。今回は 2 つの部分を作ってつなぎます。できあがる 1 行は、このあとのおこづかい帳でも使い回せます。
要件
- 関数名は receipt_line で、引数は name と price の2つ
- 品名と半角スペースの部分、金額と「円」の部分をそれぞれ f-string で作り、変数に保存する
- 品名と金額の間には半角スペースを1つだけ入れる
- 末尾に「円」を付けた文字列を return する
- 作った2つの文字列を + でつないで return する