Python | 文法の基本:型変換(int / str / float)

Python
スポンサーリンク

型変換の概要(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} 円")    # カンマ区切り
Python

str() と 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
Python

float の丸め誤差と比較

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 の丸めの性質、演算による型昇格、例外処理による堅牢化——このあたりを押さえると、実務でのデータ処理が一気に安定します。迷いどころでは「何をいつ変換するか」を明示し、前処理・丸め・表示の責務を分けると、読みやすく保守しやすいコードになります。

タイトルとURLをコピーしました