こんにちは、kamekoです。
文字列と数値を結合する際に発生するエラー「TypeError: must be str, not int」を解説します。
質問
年齢や身長、体重は数値型のため表示する際には文字型への変換は不要と認識しておりました。 なぜprint()関数で結果を表示する際にstr()関数を使用して文字型に変換しないと表示できないのでしょうか。
回答
print(1)
と、数値をprint関数で表示する際は型の変更は不要です。
しかし、 +
記号を利用し、文字列と結合する場合、異なる型同士での結合ができません。
以下のような場合はエラーになります。
>>> 'hello' + 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: must be str, not int
そのため、 +
記号を利用し、文字列と数値を結合する場合は、数値の方をstr関数を利用し、文字列型に変換します。
>>> 'hello' + str(2) 'hello2'
その他の書き方
print関数で、文字列と数値など型が違うものを混ぜて表示したい場合は、カンマでつなぐとスペースが間に入りますが、変換せずに表示できます。
>>> print('hello', 1, 2, 'world') hello 1 2 world
また、print関数の最後に sep=''
と書くとカンマでつないでもスペースが入りません。
>>> print('hello', 1, 2, 'world', sep='') hello12world
sep
にはカンマ区切りで指定した値をつなぐ文字を指定できます。以下は @
でつないだ例です。
>>> print('hello', 1, 2, 'world', sep='@') hello@1@2@world
公式ドキュメント:print
https://docs.python.org/ja/3/library/functions.html#print
フォーマット済み文字列リテラル
Python3.6からは、フォーマット済み文字列リテラル(f-string)を利用した書き方もできます。
>>> print(f'hello{1}{2}world') hello12world
公式ドキュメント:フォーマット済み文字列リテラル
https://docs.python.org/ja/3/reference/lexical_analysis.html#formatted-string-literals