Q1age = 30 のとき、"I am " + age + " years old" を実行するとどうなりますか?
数値と文字列の相互変換
Python で数値と文字列を相互に変換する方法を解説します。str() / int() / float() の使い分けと、よくあるエラーの回避まで図解で押さえます。
なぜ型変換が必要か
Pythonでは型が違う値同士をそのまま足したり比べたりできないことがあります。
代表的なのが 数値 (int / float) と 文字列 (str) の組み合わせです。たとえば "25" はパッと見は「25」ですが、Python にとっては文字が 2 つ並んだだけの文字列で、足し算には使えません。
こういうときに型変換(キャスト)をして片方の型を揃えます。str() / int() / float() の 3 つを使いこなせば、数値と文字列を自由に変換できます。
数値 → 文字列 (str())
str() に数値を渡すとその数値を表す文字列が返ってきます。
int でも float でも bool でも、str() はほぼなんでも人が読める形の文字列に変えてくれます。
数値そのものから文字列の表示表現に切り替わります。
連結 (+) で文章に組み込みたいときの前処理です。
age = 25
temp = -20.5
# 数値 → 文字列
print(str(age)) # '25'
print(type(str(age))) # <class 'str'>
# 文字列になれば + で連結できる
print("年齢: " + str(age) + "歳") # 年齢: 25歳
print("現在の温度は " + str(temp) + "度") # 現在の温度は -20.5度
f-string との使い分け
f-string(f"年齢: {age}歳")の中では自動的に str 化されるため、わざわざ str() を呼ぶ必要はありません。str() が活きるのは、連結 (+) や .join() で文字列を組み立てるとき、あるいはファイル名・ログ・JSON キーのように「文字列として確定させたい」場面です。
文字列 → 数値 (int() / float())
逆方向の変換には int() と float() を使います。文字列にしか見えなくても中身が数字なら、数値に変換して計算に使えるようになります。
ユーザー入力・CSV の 1 列・API のレスポンスなどの多くは str で届くので、数値化が必要です。
整数にしたいなら int()、小数も受け入れたいなら float()。
int("3.14") は変換ができずエラーになります。
quantity = "12"
price = "198.5"
# 文字列 → int
q = int(quantity)
print(q + 3) # 15(数値として計算できる)
# 文字列 → float
p = float(price)
print(p * q) # 2382.0(float になるので .0 が付く)
print(type(q), type(p)) # <class 'int'> <class 'float'>
変換できない文字列は ValueError
int("abc") や float("hello") のように数として読めない文字列を渡すと ValueError が発生してプログラムが止まります。ユーザー入力を直接変換するときは、isdigit() で先にチェックするか、try / except(後の章で解説)で受け止めるのが定石です。
よくある変換パターン
最後に、実務でよくつまずく変換パターンを 3 つ押さえておきましょう。
| やりたいこと | 書き方 | 結果 |
|---|---|---|
| "3.14" を整数にしたい | int(float("3.14")) | 3(小数点以下は切り捨て) |
| int 値の桁数を数えたい | len(str(1234)) | 4 |
| 小数を四捨五入で整数化 | round(3.7) ※int() ではなく round() | 4 |
int("3.14") は ValueError になります。int は「整数に見える文字列」しか受け取れないためで、小数点の付いた文字列は いったん float() を通してから int() に渡す、という2 段階が必要です。
また、int() は切り捨て(truncate)です。四捨五入が欲しいときは round() を使いましょう。
小数点を含む文字列は int() に直接渡せません。
float() で数値にしてから int() に渡す、という2 段階で整数化します。
この記事では、str() / int() / float() による型変換を整理しました。数値 → 文字列は表示の組み立てに、文字列 → 数値は入力やデータの加工に使う、という対応関係を意識すると覚えやすいです。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2int("3.14") を実行した結果として正しいものはどれですか?
Q3len(str(1234)) の結果はどれですか?