変数と基本データ型
前回のレッスンで、Python に「Hello, World!」という行を出力させました。しかし、決まったテキストしか出力できないのでは、プログラミングは退屈です。このレッスンでは変数を紹介します。これはプログラミングにおける最も基本的な概念です。データ用のラベル付きボックスとして考え、値をいつでも保存・変更できます。
1. 変数とは
変数とはデータに付ける名前です。ラベル付きの箱を想像してください。ラベルには名前(変数名)が書かれ、箱にはデータ(値)が入っています。
# age という名前の変数を定義し、数値 18 を格納
age = 18
age = 18 と書くと、Python は次の 2 つのことを行います:
- メモリ領域を確保し、数値
18を保存します - その領域に
ageというラベルを付けます
以降、age は数値 18 を表します。計算、出力、変更に使用できます:
print(age) # 18 を出力
print(age + 5) # 23 を出力
age = 20 # 値を変更 — 箱の中身が変わる
print(age) # 20 を出力
age = 18 と設定し、後で age = 20 に変更できます。同じ名前が異なる値を指すことができる——これはプログラミングにおいて非常に重要です。
2. 変数の命名規則
Python には変数名に関する厳格なルールとコミュニティの規則があります:
従わなければならないルール(エラーになります)
| ルール | 正しい例 | 間違った例 |
|---|---|---|
| 使用できるのは英文字、数字、アンダースコアのみ | my_name、age2 |
my-name(ハイフンは不可) |
| 数字で始めてはいけない | name1 |
1name |
| Python のキーワードは使えない | my_if |
if(if はキーワード) |
| 大文字小文字を区別する | name と Name は別物 |
— |
Python には35 個のキーワード(予約語とも呼ばれる)があり、if、for、while、import、class、def、return などがあります。これらは Python の構文の一部であり、変数名として使用できません。
推奨される規則(PEP 8)
PEP 8 は Python の公式スタイルガイドで、業界で広く採用されています:
- 変数名は小文字とアンダースコアを使用する(スネークケース):
student_name、total_score。studentName(キャメルケース)は使いません。 - 定数はすべて大文字を使用する:
PI = 3.14159、MAX_SIZE = 100(Python に真の定数はありません。大文字は「変更しないでください」という意味の規則です)。 - 意味のある名前を使用する:
ageはaよりも優れ、total_studentsはtsよりも優れています。コードは読まれるものです——良い名前はコメントの半分を節約します。
# 良い名前(一目でわかる)
total_price = 99.9
student_count = 35
# 悪い名前(目的が不明瞭)
a = 99.9
b = 35
3. 基本データ型
Python にはよく使われる 5 つの基本データ型があります:
| 型名 | Python の名前 | 例 | 説明 |
|---|---|---|---|
| 整数 | int |
42、-1、1000 |
小数点のない整数 |
| 浮動小数点数 | float |
3.14、-0.5、2.0 |
小数点のある数値 |
| 文字列 | str |
"Hello"、'Python' |
テキスト。引用符で囲む |
| ブール値 | bool |
True、False |
真/偽を表す。大文字で書く |
| None | NoneType |
None |
「何もない」を表す。大文字で書く |
# 各型の変数を定義
age = 25 # int
price = 19.99 # float
name = "Xiao Ming" # str
is_student = True # bool
result = None # NoneType
print(age) # 25 を出力
print(price) # 19.99 を出力
print(name) # Xiao Ming を出力
print(is_student) # True を出力
print(result) # None を出力
type() で型を確認する
変数の型がわからない場合は、type() を使います:
print(type(42)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("Hello")) # <class 'str'>
print(type(True)) # <class 'bool'>
print(type(None)) # <class 'NoneType'>
動的型付け
Python は動的型付けです——同じ変数が異なる時点で異なる型を保持できます:
x = 10 # x は整数
print(x) # 10 を出力
x = "Hello" # 同じ変数、今は文字列
print(x) # Hello を出力
x = True # 今はブール値
print(x) # True を出力
これは C++ や Java のような静的型付け言語ではできません——一度宣言すると型は固定されます。動的型付けは柔軟性と簡潔なコードを提供しますが、変数の型が予期せず変わると実行時エラーを引き起こす可能性があります(後で例を見ます)。
4. print() の詳細機能
レッスン 01 で print() を見ました。さらに便利なテクニックを 2 つ紹介します:
カンマで複数値を出力
name = "Xiao Hong"
age = 22
print("My name is", name, "and I'm", age, "years old")
# 出力:My name is Xiao Hong and I'm 22 years old
print() は引数の間に自動的にスペースを追加します。これを変更するには sep パラメータを使います:
print("2026", "06", "19", sep="-")
# 出力:2026-06-19
end で行末を制御
デフォルトでは、print() は出力後に改行を追加します。end を使って変更できます:
print("First line", end=" → ")
print("Second line", end=" → ")
print("Third line")
# 出力:First line → Second line → Third line
5. f-string:文字列への変数埋め込み
前の例で f"Hello, {name}" をすでに見ました。これは f-string(フォーマット済み文字列)と呼ばれ、Python で最も一般的な文字列フォーマット方法です。簡単に言うと、文字列の前に f を付け、変数を {} で囲むと、Python が値を置き換えます。
name = "Xiao Hong"
age = 22
print(f"My name is {name}, I'm {age} years old.")
# 出力:My name is Xiao Hong, I'm 22 years old.
変数名だけでなく、式も中括弧の中に入れられます:
a = 10
b = 3
print(f"{a} + {b} = {a + b}") # 出力:10 + 3 = 13
print(f"{a} × {b} = {a * b}") # 出力:10 × 3 = 30
数値のフォーマットも制御できます:
pi = 3.14159265
print(f"π = {pi}") # 出力:π = 3.14159265
print(f"π ≈ {pi:.2f}") # 出力:π ≈ 3.14(小数点以下2桁)
print(f"π ≈ {pi:.4f}") # 出力:π ≈ 3.1416(小数点以下4桁)
# 3桁区切りを追加
big = 1234567
print(f"{big:,}") # 出力:1,234,567
:.2f では、コロンでフォーマット指定子が始まります。. は小数点、2 は桁数、f は float を意味します。:, は 3 桁区切りを追加します。暗記する必要はありません。練習しながら覚えていきましょう。
6. 例
例 1:変数で個人情報を保存(難易度 ⭐)
個人情報を保存し、出力で参照する方法を示します。
# 個人情報を変数に保存
name = "Zhang San" # 文字列 — 引用符で囲まれたテキスト
age = 28 # 整数
height = 1.75 # 浮動小数点数
is_programmer = True # ブール値 — True か False
# f-string を使って変数の値を出力に埋め込む
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Height: {height} m")
print(f"Learning programming: {is_programmer}")
# 面白い事実 — 身長と年齢の比率
print(f"{name}'s height is {height / age:.3f} times their age")
出力:
Name: Zhang San
Age: 28
Height: 1.75 m
Learning programming: True
Zhang San's height is 0.062 times their age
{height / age:.3f} の :.3f は「小数点以下 3 桁を保持」を意味します。
例 2:変数間の演算(難易度 ⭐⭐)
異なる型は異なる演算をサポートします。ルールに注意しましょう。
# 数値演算
a = 10
b = 3
print(f"{a} + {b} = {a + b}") # 加算:13
print(f"{a} - {b} = {a - b}") # 減算:7
print(f"{a} * {b} = {a * b}") # 乗算:30
print(f"{a} / {b} = {a / b}") # 除算:3.333...(float の結果)
print(f"{a} // {b} = {a // b}") # 切り捨て除算:3(整数部分のみ)
print(f"{a} % {b} = {a % b}") # 剰余:1(余り)
print(f"{a} {b} = {a b}") # 累乗:10³ = 1000
# 文字列連結
first_name = "Zhang"
last_name = "San"
full_name = first_name + last_name # + は文字列を連結
print(f"Full name: {full_name}")
# 異なる型は混在できない
# これはエラーになる:文字列と数値は足せない
# result = "Age: " + 25 ← コメントを外して試す
出力:
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3.3333333333333335
10 // 3 = 3
10 % 3 = 1
10 ** 3 = 1000
Full name: Zhang San
+ は加算、文字列同士の + は連結です。しかし、文字列と数値の間で + を使うことはできません。必要な場合は手動で変換します:"Age: " + str(25)。str() 関数は他の型を文字列に変換します。
例 3:複数代入とスワップ(難易度 ⭐⭐⭐)
Python にはエレガントなコードのための簡潔な構文があります:
# 1 行で複数の変数に代入
x, y, z = 10, 20, 30
print(f"x={x}, y={y}, z={z}") # x=10, y=20, z=30
# 2 つの変数をスワップ — 他の言語では一時変数が必要
# Python なら 1 行
a, b = 5, 10
print(f"Before swap: a={a}, b={b}")
a, b = b, a
print(f"After swap: a={a}, b={b}")
# 複数の変数に同じ値を代入
p = q = r = 0
print(f"p={p}, q={q}, r={r}") # p=0, q=0, r=0
出力:
x=10, y=20, z=30
Before swap: a=5, b=10
After swap: a=10, b=5
p=0, q=0, r=0
a, b = b, a が動作するのは、Python が右側のすべての式を最初に評価し、その後一度に代入するからです。
よくあるユースケース
- ゲームプレイヤーの統計:体力、スコア、レベルはすべて変数に保存され、ゲームの進行に応じて更新されます。
- E コマースの価格計算:単価、数量、割引、送料——すべて変数。プログラムが最終価格を計算します。
- 設定管理:DB アドレス、API キー、サイト名を変数に保存——1 か所変更するだけでプログラム全体に反映されます。
❓ よくある質問
= は「等しい」という意味ですか?なぜ数学と違うのですか?= は代入演算子です。「右側の値を左側の変数に保存する」という意味です。これは等式の宣言ではなく、命令です。2 つの値が等しいかどうかを確認するには ==(等号 2 つ)を使います。初心者の最も一般的な間違いの 1 つは、条件式で == の代わりに = を使ってしまうことです。姓名 = "Zhang San")、強く推奨されません。ほとんどのプログラミングツール、ライブラリ、コードスニペットは英名を使用しています。言語を混在させると見た目が不自然になり、国際的なチームでのコミュニケーションに支障をきたします。変数名は英語にしましょう。
float は不正確なのですか?なぜ 0.1 + 0.2 が 0.30000000000000004 になるのですか?1/3 = 0.333... を正確に表現できないのと同様に、2 進数では 0.1 や 0.2 を正確に表現できません。正確な計算(通貨など)には、float の代わりに decimal モジュールを使用してください。None、0、空文字列 "" の違いは何ですか?None は「何もない」または「値が存在しない」を意味します。0、""、False とは異なります。0 は数値、"" は空文字列、False は偽のブール値です——これらはすべて「存在します」が、たまたま空を表しています。None はコンテナ自体がないことを意味します。"" を空のボウルだとすると、None はボウルがない状態です。📖 まとめ
- 変数はデータに付ける名前で、
=で代入し、値はいつでも変更できます - 変数名には英文字、数字、アンダースコアのみ使用可能。数字で始めたりキーワードを使ったりできません
- Python には 5 つの基本型があります:
int、float、str、bool、NoneType - Python は動的型付けです——同じ変数が異なる型を保持できますが、一貫性を保つことが推奨されます
type()で変数のデータ型を確認できます- f-string は
f"xxx{variable}"の形式で、変数や式を文字列に埋め込みます
📝 練習問題
-
基本(難易度 ⭐):
city、temperature、is_sunnyの変数を、あなたの都市名、今日の気温(float)、晴れているか(bool)で定義しましょう。print()を使って完全な文を出力してください。 -
中級(難易度 ⭐⭐):2 つの整数変数
minutesとhoursを定義します。hoursを分に変換し、minutesに加算して合計を出力してください。例:hours=2, minutes=15の場合、135分を出力します。ヒント:1 時間 = 60 分です。 -
挑戦(難易度 ⭐⭐⭐):一時変数を使わずに、3 つの変数を循環シフトでスワップします:
a → b → c → a(a は b の元の値を取得、b は c の値を取得、c は a の値を取得)。ヒント:基本となる考え方はa, b, c = b, c, aです。



