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

数値と文字列の相互変換

Pythonの型変換を、"25" と25は足せない問題から学びます。str()で数値を文字列に、int() / float()で入力を数値に戻す対応関係と、int("3.14")がValueErrorになるコツを扱います。

なぜ型変換が必要か

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))の結果はどれですか?