順番に読み進めながら学べます

数値と文字列の相互変換

Python で数値と文字列を相互に変換する方法を解説します。str() / int() / float() の使い分けと、よくあるエラーの回避まで図解で押さえます。

なぜ型変換が必要か

Pythonでは型が違う値同士をそのまま足したり比べたりできないことがあります。

代表的なのが 数値 (int / float) と 文字列 (str) の組み合わせです。たとえば "25" はパッと見は「25」ですが、Python にとっては文字が 2 つ並んだだけの文字列で、足し算には使えません。

型が合わないと演算できない
25int型+"歳"str型TypeError型違い型違い

こういうときに型変換(キャスト)をして片方の型を揃えますstr() / int() / float() の 3 つを使いこなせば、数値と文字列を自由に変換できます。

まずは型を合わせないとどうなるか、エラーメッセージを確認してみましょう。そのまま実行してみてください。

Python エディタ

コードを実行してください

数値 → 文字列 (str())

str() に数値を渡すとその数値を表す文字列が返ってきます。

int でも float でも bool でも、str() はほぼなんでも人が読める形の文字列に変えてくれます。

str() の変換イメージ
25int型str()"25"str型-20.5float型str()"-20.5"str型渡すstr 化渡す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 キーのように「文字列として確定させたい」場面です。

user = "Alice"score = 95 を使って、レポート 1 行を組み立ててみましょう。

str()+ だけを使って、"Alice さんの点数は 95 点です" と表示してください。

② 同じ内容をf-string で書き、str() なしで表示してください。

Python エディタ

コードを実行してください

文字列 → 数値 (int() / float())

逆方向の変換には int()float() を使います。文字列にしか見えなくても中身が数字なら、数値に変換して計算に使えるようになります。

ユーザー入力・CSV の 1 列・API のレスポンスなどの多くは str で届くので、数値化が必要です。

int() と float() の使い分け
"100"str型int()100int型"3.14"str型float()3.14float型渡す整数化渡す小数化

整数にしたいなら 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(後の章で解説)で受け止めるのが定石です。

ショッピングカートの合計金額を計算してみましょう。値は全部文字列として与えられています。

unit_price_str = "198"count_str = "5"、そして消費税率 TAX_RATE = 0.1 が用意されています。

int() で個数、int() で単価を数値に変換してください。

② 合計(単価 × 個数)に税率を掛けた税込み金額print() で表示してください。

Python エディタ

コードを実行してください

よくある変換パターン

最後に、実務でよくつまずく変換パターンを 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() を使いましょう。

小数の文字列は float() を経由して整数化
"3.14"str型float()3.14float型int()3int型渡す小数化渡す整数化

小数点を含む文字列は int() に直接渡せません。

float() で数値にしてから int() に渡す、という2 段階で整数化します。

小数の付いた価格文字列 price_str = "1980.6" を整数として使いたい、という場面です。

int(price_str)そのまま実行してエラーを確認してから、コメントアウトしてください。

float() を経由して整数化し、結果を print() で表示してください。

Python エディタ

コードを実行してください

この記事では、str() / int() / float() による型変換を整理しました。数値 → 文字列は表示の組み立てに、文字列 → 数値は入力やデータの加工に使う、という対応関係を意識すると覚えやすいです。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1age = 30 のとき、"I am " + age + " years old" を実行するとどうなりますか?

Q2int("3.14") を実行した結果として正しいものはどれですか?

Q3len(str(1234)) の結果はどれですか?