コンテンツにスキップ

変数とデータ型

この章で学ぶこと

  • 変数の概念と代入の仕方
  • Python の基本データ型(int, float, str, bool)
  • 型変換(キャスト)の方法
  • 算術演算子・比較演算子・論理演算子
  • input() によるキーボード入力の受け取り
  • 初心者がよく陥るミスとその対策

変数とは

変数(variable)は、値を格納するための「名前付きの箱」です。プログラムの中でデータを保持し、後から参照・変更するために使います。

変数への代入

Python では =(代入演算子)を使って変数に値を代入します。

# 変数に値を代入する
x = 10
name = "太郎"
pi = 3.14

# 変数の値を表示する
print(x)       # 10
print(name)    # 太郎
print(pi)      # 3.14

変数名のルール

  • 英字(a-z, A-Z)、数字(0-9)、アンダースコア(_)が使える
  • 数字で始めることはできない(1name は不可、name1 は可)
  • Python の予約語if, for, class など)は使えない
  • 大文字と小文字は区別される(Namename は別の変数)
  • 慣習として、変数名は小文字とアンダースコアで書く(例: student_name

よい変数名をつけよう

変数名は「何を表しているか」が一目でわかるようにつけましょう。xa のような短い名前は、ループカウンタなど用途が明らかな場合を除き避けるべきです。

# 悪い例: 何を表しているかわからない
a = 170.5
b = 65.0

# 良い例: 変数名から意味がわかる
height_cm = 170.5
weight_kg = 65.0

変数の再代入

変数にはいつでも新しい値を代入できます。

x = 10
print(x)    # 10

x = 20      # 新しい値を代入(上書き)
print(x)    # 20

x = x + 5   # 現在の値に 5 を加えた結果を再代入
print(x)    # 25

実行例

>>> x = 42
>>> print(x)
42
>>> x = x + 8
>>> print(x)
50
>>> type(x)
<class 'int'>
>>> name = "Python"
>>> type(name)
<class 'str'>

基本データ型

Python には様々なデータ型がありますが、まずは以下の 4 つを覚えましょう。

基本データ型の比較表

データ型 説明 ミュータブル
int 整数 42, -5, 0 いいえ
float 浮動小数点数 3.14, -0.5, 1.0 いいえ
str 文字列 "hello", 'Python' いいえ
bool 真偽値 True, False いいえ

int(整数型)

小数点のない数値です。

age = 20
count = -5
big_number = 1_000_000  # アンダースコアで桁区切りができる(読みやすさのため)

print(type(age))  # <class 'int'>

float(浮動小数点数型)

小数点を含む数値です。

height = 170.5
temperature = -3.2
ratio = 1.0  # 小数点があれば float

print(type(height))  # <class 'float'>

浮動小数点数の誤差

コンピュータは小数を 2 進数で表現するため、わずかな誤差が生じることがあります。

print(0.1 + 0.2)  # 0.30000000000000004(0.3 にならない)

金額計算など正確さが求められる場面では、decimal モジュールの使用を検討してください。

str(文字列型)

テキストデータを表します。シングルクォート ' またはダブルクォート " で囲みます。

greeting = "こんにちは"
language = 'Python'
empty = ""  # 空文字列

print(type(greeting))  # <class 'str'>

複数行の文字列はトリプルクォートで囲みます。

message = """これは
複数行の
文字列です"""
print(message)

bool(真偽値型)

True(真)または False(偽)の 2 つの値だけを持ちます。条件分岐やループの制御に使います。

is_student = True
has_passed = False

print(type(is_student))  # <class 'bool'>

型の確認

type() 関数を使うと、値や変数のデータ型を確認できます。学習中に「この値は何型だろう?」と思ったら積極的に使いましょう。

>>> type(42)
<class 'int'>
>>> type(3.14)
<class 'float'>
>>> type("hello")
<class 'str'>
>>> type(True)
<class 'bool'>

型変換(キャスト)

異なるデータ型の間で値を変換することを型変換(キャスト)と言います。

# int → str
age = 20
age_str = str(age)       # "20"(文字列)

# str → int
num_str = "42"
num = int(num_str)       # 42(整数)

# str → float
pi_str = "3.14"
pi = float(pi_str)       # 3.14(浮動小数点数)

# float → int(小数部分は切り捨て)
score = 85.7
score_int = int(score)   # 85

真偽値への変換

Python では、あらゆる値を bool() で真偽値に変換できます。以下の値は False になり、それ以外はすべて True になります。

# False になる値
print(bool(0))      # False(整数の 0)
print(bool(0.0))    # False(浮動小数点数の 0)
print(bool(""))     # False(空文字列)
print(bool([]))     # False(空リスト)
print(bool(None))   # False(None)

# True になる値
print(bool(1))      # True(0 以外の整数)
print(bool(-1))     # True(負の数も True)
print(bool("a"))    # True(空でない文字列)
print(bool([1]))    # True(空でないリスト)

変換できない場合はエラーになる

数値に変換できない文字列を int()float() に渡すとエラーが発生します。

int("abc")  # ValueError: invalid literal for int() with base 10: 'abc'

よくある間違い

float 形式の文字列を直接 int に変換しようとする:

# 間違い: "3.14" は直接 int に変換できない
num = int("3.14")  # ValueError!

# 正しい: 一度 float に変換してから int に変換する
num = int(float("3.14"))  # 3

演算子

算術演算子

数値の計算に使う演算子です。

演算子 意味 結果
+ 加算 7 + 3 10
- 減算 7 - 3 4
* 乗算 7 * 3 21
/ 除算(結果は float) 7 / 3 2.3333...
// 整数除算(切り捨て) 7 // 3 2
% 剰余(余り) 7 % 3 1
** 累乗 2 ** 3 8
a = 10
b = 3

print(a + b)   # 13
print(a - b)   # 7
print(a * b)   # 30
print(a / b)   # 3.3333333333333335
print(a // b)  # 3
print(a % b)   # 1
print(a ** b)  # 1000

よくある間違い

/// の混同:

/ は常に float を返し、// は切り捨て除算を行います。整数同士の割り算でも /float になります。

>>> 10 / 2
5.0        # float が返る(int ではない!)
>>> 10 // 2
5          # int が返る
>>> 7 / 2
3.5        # 通常の除算
>>> 7 // 2
3          # 切り捨て除算

特に「割り算の結果を整数として使いたい」ときに / を使ってしまうと、予期しない float 値になることがあります。

# 間違い: / を使うと float になる
index = 10 / 2    # 5.0(float)
# リストのインデックスに使うとエラーになる場合がある

# 正しい: 整数が欲しいなら // を使う
index = 10 // 2   # 5(int)

複合代入演算子

計算と代入を同時に行うショートカットがあります。

x = 10
x += 3   # x = x + 3 と同じ → 13
x -= 2   # x = x - 2 と同じ → 11
x *= 4   # x = x * 4 と同じ → 44
x //= 5  # x = x // 5 と同じ → 8

比較演算子

2 つの値を比較し、結果を True または False で返します。

演算子 意味 結果
== 等しい 5 == 5 True
!= 等しくない 5 != 3 True
< より小さい 3 < 5 True
> より大きい 3 > 5 False
<= 以下 5 <= 5 True
>= 以上 3 >= 5 False
x = 10
print(x == 10)  # True
print(x != 5)   # True
print(x > 15)   # False
print(x <= 10)  # True

よくある間違い

=== の混同:

=代入==比較です。条件式では必ず == を使います。

x = 10

# 間違い: = は代入なので、比較にはならない
# if x = 10:     # SyntaxError!
#     print("10です")

# 正しい: == で比較する
if x == 10:
    print("10です")

異なる型の比較に注意:

>>> 10 == 10.0
True           # int と float の比較は値で判断される
>>> "10" == 10
False          # str と int は常に False(型が違う)
>>> 1 == True
True           # bool は int のサブクラスなので True == 1
>>> 0 == False
True           # False == 0

論理演算子

複数の条件を組み合わせるときに使います。

演算子 意味 説明
and かつ 両方とも True のとき True
or または どちらか一方が True のとき True
not 否定 TrueFalse を反転
age = 20
has_ticket = True

# and: 両方の条件を満たす必要がある
print(age >= 18 and has_ticket)  # True

# or: どちらか一方を満たせばよい
print(age >= 65 or has_ticket)   # True

# not: 条件を反転する
print(not has_ticket)            # False

実行例

>>> 5 + 3
8
>>> 10 / 3
3.3333333333333335
>>> 10 // 3
3
>>> 10 % 3
1
>>> 2 ** 10
1024
>>> 5 == 5
True
>>> 5 != 3
True
>>> True and False
False
>>> True or False
True
>>> not True
False

キーボード入力(input 関数)

input() 関数を使うと、プログラム実行中にユーザーからキーボード入力を受け取ることができます。

# 名前を入力してもらう
name = input("あなたの名前を入力してください: ")
print("こんにちは、" + name + "さん!")

よくある間違い

input() の戻り値は常に文字列であることを忘れる:

input() は常に str 型の値を返します。数値として使いたい場合は型変換が必要です。

# 間違い: 型変換を忘れる
age = input("年齢を入力してください: ")  # "20" が入る(文字列)
print(age + 1)  # TypeError: can only concatenate str (not "int") to str

# 正しい: int() で型変換する
age = int(input("年齢を入力してください: "))  # 20 が入る(整数)
print(age + 1)  # 21

文字列の + と数値の + の違い:

# 文字列同士の + は「連結」
>>> "10" + "20"
'1020'

# 数値同士の + は「加算」
>>> 10 + 20
30

# 文字列と数値の + はエラー
>>> "10" + 20
TypeError: can only concatenate str (not "int") to str

入力を使った計算の例

# 2 つの数値を入力して合計を計算する
a = int(input("1 つ目の数を入力: "))
b = int(input("2 つ目の数を入力: "))

total = a + b
print("合計: " + str(total))

# f-string を使うとより簡潔に書ける(文字列の章で詳しく扱います)
print(f"合計: {total}")

入力値のバリデーション

ユーザーが数値以外を入力すると int()float()ValueError が発生します。実用的なプログラムでは、入力が正しいかどうかを確認するとよいでしょう。

# 入力値が整数かどうかを確認する例
text = input("整数を入力してください: ")
if text.isdigit():
    num = int(text)
    print(f"入力された数: {num}")
else:
    print("整数ではありません")

ただし isdigit() は負の数や小数には対応していない点に注意してください。より堅牢な方法は try-except を使う方法です(例外処理を学んだ後に活用してください)。


よくある間違いのまとめ

よくある間違い

1. === の混同

# 間違い: 代入演算子を条件式で使っている
# if score = 100:  # SyntaxError

# 正しい: 比較演算子を使う
if score == 100:
    print("満点!")

2. input() の型変換忘れ

# 間違い: input() は文字列を返す
num = input("数値: ")
result = num * 2  # "55" のような文字列の繰り返しになる

# 正しい: 数値に変換してから計算する
num = int(input("数値: "))
result = num * 2  # 10 のような数値の計算になる

3. /// の混同

# 間違い: 整数の結果がほしいのに / を使う
half = 7 / 2   # 3.5(float)

# 正しい: 切り捨て除算には // を使う
half = 7 // 2  # 3(int)

4. 文字列と数値の結合

age = 20

# 間違い: 文字列と数値は直接結合できない
# print("年齢は" + age + "歳です")  # TypeError

# 正しい方法 1: str() で変換する
print("年齢は" + str(age) + "歳です")

# 正しい方法 2: f-string を使う(推奨)
print(f"年齢は{age}歳です")

5. 変数名に予約語を使う

# 間違い: Python の予約語は変数名に使えない
# class = "A"   # SyntaxError
# for = 10      # SyntaxError
# if = True     # SyntaxError

# 正しい: 末尾にアンダースコアをつけるなどの工夫
class_ = "A"
grade = "A"     # より良い方法: 意味のある別の名前にする

まとめ

  • 変数は値を格納するための名前付きの箱であり、= で代入する
  • Python の基本データ型は int(整数)、float(浮動小数点数)、str(文字列)、bool(真偽値)の 4 つ
  • int(), float(), str() などで型変換ができる
  • 算術演算子+, -, *, /, //, %, **)で数値計算を行う
  • / は常に float を返し、// は切り捨て除算で int を返す
  • 比較演算子==, !=, <, > など)は True / False を返す
  • =(代入)と ==(比較)を混同しないこと
  • 論理演算子and, or, not)で複数の条件を組み合わせる
  • input() の戻り値は常に文字列なので、数値として使う場合は型変換が必要