型変換の概要(int / float / str の基本)
Pythonでは、数値や文字列などの「型」を状況に応じて変換できます。よく使うのは int(整数)、float(小数)、str(文字列)の相互変換です。ユーザー入力は基本的に文字列で受け取られるため、計算するときは数値へ、表示やファイル出力では文字列へ変換するのが定番パターンになります。型変換は「必要な場面で明示的に行う」ことが安全で、意図しないバグを避けられます。
文字列から数値へ(str → int / float)
基本的な変換と注意点
数字だけで構成された文字列は、int() で整数、float() で小数に変換できます。小数点を含む場合は int() では変換できないため、float() を使います。空白や単位が混じる場合は、前処理で取り除いてから変換します。
age_text = "20"
age = int(age_text) # 20
price_text = "3.14"
price = float(price_text) # 3.14
bad = "12円"
# int(bad) # これはエラー。前処理が必要
Pythonエラーを避ける前処理のコツ
前後の空白を strip() で除去し、数字と小数点のみを許可する簡易チェックを入れると、変換の失敗を減らせます。例外処理(try/except)を併用すると、ユーザー入力でも堅牢に動かせます。
def parse_int(text: str) -> int:
text = text.strip()
if text.isdigit():
return int(text)
raise ValueError("整数に変換できません")
def parse_float(text: str) -> float:
text = text.strip()
try:
return float(text)
except ValueError:
raise ValueError("小数に変換できません")
Python数値から文字列へ(int / float → str)
結合・表示のための基本
数値を文字列に連結するには、str() を使って文字列化します。f文字列は読みやすく、書式指定も簡単です。見た目を整える(小数桁やカンマ区切り)ときはフォーマット指定を使いましょう。
amount = 12345.678
print("合計は " + str(amount) + " 円")
print(f"合計は {amount:.2f} 円") # 小数2桁
print(f"合計は {amount:,.2f} 円") # カンマ区切り
Pythonstr() と repr() の違い(補足)
str() は人に見せる表示向け、repr() は開発者向けの「再現可能な情報量の多い表示」を目指します。初学者はまず str() を使い、デバッグで詳細が欲しいときに repr() を意識できれば十分です。
数値型同士の変換(int ↔ float)
小数化と整数化の性質(ここが重要)
int から float への変換は安全で、情報が増える(小数の表現が可能)方向です。一方、float を int に変換すると「0方向への切り捨て」になるため、負数や端数の扱いに注意が必要です。数学的な床・天井を使いたい場合は math.floor / math.ceil を選びましょう。
import math
print(float(3)) # 3.0(int → float)
print(int(3.9)) # 3 (0方向の切り捨て)
print(int(-3.9)) # -3 (0方向)
print(math.floor(-3.1)) # -4(床)
print(math.ceil(-3.1)) # -3(天井)
Python演算による暗黙の型昇格(理解しておくと楽)
整数と小数を混ぜて計算すると、結果は float になります。平均値などで自然に小数へ「昇格」します。意図せず型が変わるときは、後続処理の前提と整合させましょう。
avg = (10 + 15.0) / 2
print(avg, type(avg)) # 12.5 <class 'float'>
Pythonよくある落とし穴と安全策
数値に見えるが数値でない文字列
カンマ、単位、全角数字、余計な空白が混ざると変換に失敗します。正規表現や置換で整形してから変換するのが安全です。
import re
def parse_price(text: str) -> int:
# 数字とカンマだけを抽出し、カンマを除去して整数化
m = re.search(r"\d[\d,]*", text)
if not m:
raise ValueError("数値が見つかりません")
return int(m.group().replace(",", ""))
print(parse_price("1,280円")) # 1280
Pythonfloat の丸め誤差と比較
float は二進表現の近似値なので、== 比較で意図しない不一致が起こり得ます。閾値判定や一致判定には許容誤差(math.isclose)を使いましょう。
import math
x = 0.1 + 0.2
print(math.isclose(x, 0.3, rel_tol=1e-9)) # True
Python例外処理でユーザー入力を堅牢に
ユーザー入力の型変換は失敗が前提です。try/except で捕まえ、丁寧なメッセージを返すと体験がよくなります。
def read_amount():
s = input("金額を入力してください: ")
try:
return int(s)
except ValueError:
print("整数を入力してください")
return None
Python例題で身につける
例題1:ユーザー入力を数値に変換して合計
複数の入力を受け取り、型変換後に合計します。失敗時はスキップします。
inputs = ["120", " 340", "abc", "560"]
total = 0
for s in inputs:
s = s.strip()
try:
total += int(s)
except ValueError:
pass # 変換できないものは無視
print(total) # 1020
Python例題2:税込計算と表示整形(数値→文字列)
計算は数値型、表示は文字列で整えます。役割を分けるとコードが読みやすくなります。
price, qty, rate = 350, 2, 0.1
subtotal = price * qty
tax = round(subtotal * rate)
total = subtotal + tax
print(f"小計: ¥{subtotal:,} / 税: ¥{tax:,} / 合計: ¥{total:,}")
Python例題3:柔軟な小数入力と安全な変換(str→float→int)
小数で受け取り、業務仕様に合わせて整数に丸めます。
def to_amount(text: str) -> int:
try:
value = float(text.strip())
except ValueError:
raise ValueError("金額は数値で入力してください")
return round(value) # 仕様に応じて floor/ceil/round を選ぶ
print(to_amount("1000.4")) # 1000
Python例題4:CSVの価格列をクリーニングして集計
単位やカンマが混じる列を正規化してから集計します。
rows = ["1,200円", " 980 円", "無料", "2,500円"]
total = 0
for r in rows:
try:
total += parse_price(r)
except ValueError:
pass # 「無料」などはスキップ
print(total) # 4680
Pythonまとめ
型変換は「入力は文字列、計算は数値、表示は文字列」と役割を切り替える作法です。str→int/float の前処理、float→int の丸めの性質、演算による型昇格、例外処理による堅牢化——このあたりを押さえると、実務でのデータ処理が一気に安定します。迷いどころでは「何をいつ変換するか」を明示し、前処理・丸め・表示の責務を分けると、読みやすく保守しやすいコードになります。
