文字列への変換
計算はできた。表示しようとしたら止まった
金額を数値で持てるようになりました。ところが、その数値を文字列につなごうとすると、今度はここで止まります。
Python
count = 3
print("記録は " + count + " 件です")TypeError です。メッセージは can only concatenate str と出ます。「文字列にしか足せない」という意味で、+ の右に数値が来たところで落ちています。
型を自動で合わせてくれる言語もありますが、Python はそれをしません。"1" + 1 が "11" なのか 2 なのか、機械には決められないからです。曖昧さを残さない代わりに、人が明示する決まりになっています。
str で文字にする
str に値を渡すと、それを文字にした値が返ります。
Python
count = 3
print("記録は " + str(count) + " 件です")記録は 3 件です と出ます。見た目は変わりませんが、型が int から str に変わったので連結できます。int と str はちょうど逆向きの変換で、行って戻ってくると元と同じ文字列になります。
int は数として読めない文字列を渡すと止まりましたが、str は失敗しません。どんな値にも「文字にした姿」があるので、いつでも成功します。
包むのは数値のほうだけです。式の全体を str(...) で囲んでも、かっこの中で先に連結が起きるので、同じところで落ちます。
数値のまま持ち回り、人に見せる直前だけ文字列にする。この順番を守ると、あとで合計を出したくなったときに困りません。最初から文字列にしてしまうと、
intに戻す手間が増えます。
str と int は名前が短いので逆に書きがちです。str は文字列にする、int は整数にする、と結果の型のほうで覚えてください。
やってみよう
関数 price_text を実装してください。引数は品名 name と金額 price の 2 つで、price は 数値 で渡ってきます。
品名と金額を半角スペース 1 つでつなぎ、末尾に 円 を付けた文字列を返します。price_text("りんご", 120) なら りんご 120円、price_text("ノート", 0) なら ノート 0円 です。
price は数値なので、そのままでは連結できません。落ちたら、TypeError のメッセージがどちら側を指しているかを読んでみてください。
要件
- 関数名は price_text で、引数は name と price の2つ
- price は数値で渡ってくるので str で文字列に変換する
- name と金額の間には半角スペースを1つだけ入れる
- 末尾に「円」を付けた文字列を return する
入出力例
price_text("りんご", 120) → "りんご 120円"
price_text("牛乳", 198) → "牛乳 198円"
price_text("ノート", 0) → "ノート 0円"
price_text("チョコレートアイス", 1200) → "チョコレートアイス 1200円"
price_text("", 50) → " 50円"