メインコンテンツへスキップ
Lesson8 / 9

型変換 - データ型を変える

目次

このレッスンで学ぶこと

  • データ型の変換(型変換)とは何か
  • 数値・文字列・リスト間の変換方法
  • 型変換でよくあるエラーとその対処法
  • type()関数による型の確認方法

型変換とは

型変換は、あるデータ型を別のデータ型に変換することです。

Pythonでは、異なるデータ型同士を直接組み合わせることはできません。たとえば、文字列と数値を足し算したり、整数と文字列を連結することはできません。

型変換が必要な例

Python
# これはエラーになる
age = "25"  # 文字列
print(age + 1)  # TypeError: 文字列と数値は計算できない

# 型変換すれば計算できる
age = "25"
age_num = int(age)  # 文字列 → 整数に変換
print(age_num + 1)  # 26

Pythonの主な型変換関数

関数説明
int()整数型に変換int("123")123
float()浮動小数点型に変換float("3.14")3.14
str()文字列型に変換str(123)"123"
bool()ブール型に変換bool(1)True
list()リストに変換list("abc")['a', 'b', 'c']
Python
# 様々な型変換
num_str = "123"
num = int(num_str)        # "123" → 123

float_num = float("3.14") # "3.14" → 3.14
text = str(456)           # 456 → "456"
flag = bool(1)            # 1 → True

💡 豆知識: 型変換は英語で「Type Conversion」または「Type Casting」と言います。プログラミングの基本テクニックの一つです。


なぜ型変換が必要なのか?

プログラムでは、様々なデータを組み合わせて処理します。その際、データ型を正しく合わせることが不可欠です。

型変換が必要な場面

1. ユーザー入力の処理

Python
# input()は常に文字列を返す
age_str = input("年齢を入力: ")  # "25" (文字列)
age = int(age_str)                # 25 (整数)に変換
next_year_age = age + 1           # 計算可能

2. 文字列と数値の組み合わせ

Python
# エラーになる例
score = 85
# print("得点: " + score)  # TypeError

# 正しい方法
print("得点: " + str(score))  # str()で文字列に変換
# または
print(f"得点: {score}")        # f-stringを使う

3. 小数と整数の計算

Python
# 整数同士の割り算
result = 10 / 3
print(result)  # 3.333...(自動的にfloat型になる)

# 明示的な変換
a = 10
b = float(a)  # 10.0(float型)

型変換のメリット

  1. 柔軟性: 異なる型のデータを組み合わせられる
  2. エラー回避: 型の不一致によるエラーを防げる
  3. データ処理: 適切な型で効率的な処理ができる

型の確認

type()関数

機能: 変数や値のデータ型を確認します。

Python
# 型を確認
print(type(10))        # <class 'int'>
print(type(3.14))      # <class 'float'>
print(type("Hello"))   # <class 'str'>
print(type([1, 2, 3])) # <class 'list'>
print(type(True))      # <class 'bool'>

用途: デバッグ、型の確認


文字列への変換

str() - 文字列に変換

機能: 数値やリストなど、あらゆるデータ型を文字列に変換します。

Python
# 数値を文字列に
num = 123
text = str(num)
print(text)       # "123"
print(type(text)) # <class 'str'>

# 浮動小数点を文字列に
pi = 3.14
text_pi = str(pi)
print(text_pi)    # "3.14"

# リストを文字列に
my_list = [1, 2, 3]
text_list = str(my_list)
print(text_list)  # "[1, 2, 3]"

用途: 文字列結合、ファイル出力、画面表示


数値への変換

int() - 整数に変換

機能: 文字列や小数を整数に変換します。

Python
# 文字列を整数に
text = "123"
num = int(text)
print(num)        # 123
print(type(num))  # <class 'int'>

# 浮動小数点を整数に(小数点以下切り捨て)
pi = 3.14
num = int(pi)
print(num)  # 3

注意: 小数を含む文字列("3.14")は直接int()で変換できません。まずfloat()で変換してからint()にします。


float() - 小数に変換

機能: 文字列や整数を浮動小数点数(小数)に変換します。

Python
# 文字列を小数に
text = "3.14"
num = float(text)
print(num)        # 3.14
print(type(num))  # <class 'float'>

# 整数を小数に
num = 10
decimal = float(num)
print(decimal)  # 10.0

用途: 精密な計算、割り算の結果を小数で扱う


リスト・タプル・集合への変換

list() - リストに変換

機能: 文字列、タプル、集合などをリストに変換します。

Python
# 文字列をリストに(1文字ずつ分割)
text = "Hello"
chars = list(text)
print(chars)  # ['H', 'e', 'l', 'l', 'o']

# タプルをリストに
my_tuple = (1, 2, 3)
my_list = list(my_tuple)
print(my_list)  # [1, 2, 3]

# 集合をリストに
my_set = {3, 1, 2}
my_list = list(my_set)
print(my_list)  # [1, 2, 3](順序は不定)

用途: データの編集(タプルは変更不可なのでリストに変換)、順序付け


tuple() - タプルに変換

機能: リストや文字列をタプル(変更不可のリスト)に変換します。

Python
# リストをタプルに
my_list = [1, 2, 3]
my_tuple = tuple(my_list)
print(my_tuple)  # (1, 2, 3)

# 文字列をタプルに
text = "abc"
chars = tuple(text)
print(chars)  # ('a', 'b', 'c')

用途: 辞書のキーにする、データを保護(変更不可にする)


set() - 集合に変換

機能: リストや文字列を集合(重複のないデータの集まり)に変換します。

Python
# リストを集合に(重複除去)
numbers = [1, 2, 2, 3, 3, 3]
unique = set(numbers)
print(unique)  # {1, 2, 3}

# 文字列を集合に
text = "hello"
chars = set(text)
print(chars)  # {'h', 'e', 'l', 'o'}(重複するlは1つだけ)

用途: 重複の除去、集合演算


具体例

例1: ユーザー入力の処理

Python
# input()は常に文字列を返す
age_str = input("年齢を入力してください: ")

# 整数に変換
age = int(age_str)

# 計算
next_year_age = age + 1
print(f"来年は{next_year_age}歳です")

例2: 計算結果の表示

Python
price = 1000
tax_rate = 0.1

tax = price * tax_rate

# 数値を文字列に変換して結合
message = "税込価格は" + str(price + tax) + "円です"
print(message)

# f-stringなら自動変換される(推奨)
message = f"税込価格は{price + tax}円です"
print(message)

例3: CSVデータの処理

Python
# CSVの1行(文字列)
csv_line = "太郎,25,85.5"

# カンマで分割
parts = csv_line.split(",")
print(parts)  # ['太郎', '25', '85.5']

# 型変換
name = parts[0]        # 文字列のまま
age = int(parts[1])    # 整数に変換
score = float(parts[2]) # 小数に変換

print(f"{name}さん、{age}歳、スコア{score}点")

例4: 真偽値への変換

Python
# bool() - 真偽値に変換

# 0と空はFalse
print(bool(0))      # False
print(bool(""))     # False
print(bool([]))     # False

# それ以外はTrue
print(bool(1))      # True
print(bool("text")) # True
print(bool([1]))    # True

例5: 文字列から数値リストへ

Python
# スペース区切りの数値文字列
numbers_str = "10 20 30 40 50"

# 分割
parts = numbers_str.split()
print(parts)  # ['10', '20', '30', '40', '50']

# 各要素を整数に変換
numbers = []
for part in parts:
    numbers.append(int(part))

print(numbers)  # [10, 20, 30, 40, 50]

# リスト内包表記でも書ける
numbers = [int(x) for x in numbers_str.split()]
print(numbers)  # [10, 20, 30, 40, 50]

例6: 辞書のキーと値

Python
# 数値をキーにした辞書
scores = {1: "優", 2: "良", 3: "可"}

# キーを文字列に変換
key = "1"
# print(scores[key])  # KeyError

# 文字列を整数に変換
key_int = int(key)
print(scores[key_int])  # "優"

よくある間違い

間違い1: 変換できない文字列

Python
text = "こんにちは"
num = int(text)  # ValueError: invalid literal for int() with base 10: 'こんにちは'

原因: 数値として解釈できない文字列は変換できません。

対策:

Python
text = "123"
if text.isdigit():
    num = int(text)
    print(num)
else:
    print("数値に変換できません")

間違い2: 小数を含む文字列をint()

Python
text = "3.14"
num = int(text)  # ValueError: invalid literal for int() with base 10: '3.14'

対策:

Python
text = "3.14"
num = float(text)  # まずfloatに変換
num_int = int(num)  # 次にintに変換
print(num_int)  # 3

間違い3: 型の不一致

Python
age = "25"
result = age + 5  # TypeError: can only concatenate str (not "int") to str

対策:

Python
age = "25"
result = int(age) + 5
print(result)  # 30

間違い4: bool()の誤解

Python
# "False"という文字列はTrueになる
text = "False"
result = bool(text)
print(result)  # True(空でない文字列はTrue)

正しい方法:

Python
text = "False"
result = (text == "True")
print(result)  # False

間違い5: list()とsplit()の混同

Python
# list()は1文字ずつ分割
text = "hello"
result1 = list(text)
print(result1)  # ['h', 'e', 'l', 'l', 'o']

# split()は区切り文字で分割
text = "hello world"
result2 = text.split()
print(result2)  # ['hello', 'world']

練習問題

問題1(基礎)⭐☆☆

文字列 "100" と "200" を整数に変換して、合計を計算してください。

💡 ヒント

int() 関数を使います。

✅ 解答例
Python
num1_str = "100"
num2_str = "200"

# 整数に変換
num1 = int(num1_str)
num2 = int(num2_str)

# 合計を計算
total = num1 + num2
print(total)  # 300

実行結果:

300

解説: 文字列を数値に変換しないと、"100" + "200""100200" という文字列結合になってしまいます。


問題2(基礎)⭐☆☆

ユーザーに身長(cm)を入力してもらい、メートルに変換して表示してください。

💡 ヒント
  1. input() で入力を受け取る(文字列)
  2. float() で小数に変換
  3. 100で割ってメートルに
✅ 解答例
Python
# 身長を入力
height_cm_str = input("身長(cm)を入力してください: ")

# 小数に変換
height_cm = float(height_cm_str)

# メートルに変換
height_m = height_cm / 100

print(f"あなたの身長は{height_m}mです")

実行例:

身長(cm)を入力してください: 170
あなたの身長は1.7mです

解説: input() は常に文字列を返すため、計算する前に数値型に変換する必要があります。


問題3(応用)⭐⭐☆

スペース区切りで入力された3つの点数を、リストの数値として受け取り、平均点を計算してください。

入力例: 85 92 78

💡 ヒント
  1. input() で入力を受け取る
  2. split() でスペースで分割
  3. 各要素を int() で整数に変換
  4. 平均を計算
✅ 解答例
Python
# 点数を入力
scores_str = input("3つの点数をスペース区切りで入力してください: ")

# スペースで分割
parts = scores_str.split()

# 各要素を整数に変換
scores = []
for part in parts:
    scores.append(int(part))

# 平均を計算
average = sum(scores) / len(scores)

print(f"平均点: {average}点")

実行例:

3つの点数をスペース区切りで入力してください: 85 92 78
平均点: 85.0点

解説: 文字列を split() で分割し、各要素を int() で整数に変換します。リスト内包表記を使うと scores = [int(x) for x in parts] と1行で書けます。


まとめ

このレッスンでは、型変換の基本とエラー回避の考え方を学びました。

  • type() で現在の型を確認し、適切な変換を選ぶことができます。
  • int(), float(), str() で基本型を相互に変換できます。
  • list(), tuple(), set() を使うとコレクション型の変換ができます。
  • input() は文字列を返すため、数値計算前に型変換が必要です。
  • 変換失敗が起きる条件を理解し、事前チェックや例外処理につなげることが重要です。