変数と基本データ型

前回のレッスンで、Python に「Hello, World!」という行を出力させました。しかし、決まったテキストしか出力できないのでは、プログラミングは退屈です。このレッスンでは変数を紹介します。これはプログラミングにおける最も基本的な概念です。データ用のラベル付きボックスとして考え、値をいつでも保存・変更できます。


1. 変数とは

変数とはデータに付ける名前です。ラベル付きの箱を想像してください。ラベルには名前(変数名)が書かれ、箱にはデータ(値)が入っています。

PYTHON
# age という名前の変数を定義し、数値 18 を格納
age = 18

age = 18 と書くと、Python は次の 2 つのことを行います:

  1. メモリ領域を確保し、数値 18 を保存します
  2. その領域に age というラベルを付けます

以降、age は数値 18 を表します。計算、出力、変更に使用できます:

PYTHON
print(age)       # 18 を出力
print(age + 5)   # 23 を出力
age = 20         # 値を変更 — 箱の中身が変わる
print(age)       # 20 を出力
💡 ヒント:変数はその値が変わるから「変数」と呼ばれます。最初に age = 18 と設定し、後で age = 20 に変更できます。同じ名前が異なる値を指すことができる——これはプログラミングにおいて非常に重要です。


2. 変数の命名規則

Python には変数名に関する厳格なルールとコミュニティの規則があります:

従わなければならないルール(エラーになります)

ルール 正しい例 間違った例
使用できるのは英文字、数字、アンダースコアのみ my_nameage2 my-name(ハイフンは不可)
数字で始めてはいけない name1 1name
Python のキーワードは使えない my_if if(if はキーワード)
大文字小文字を区別する nameName は別物

Python には35 個のキーワード(予約語とも呼ばれる)があり、ifforwhileimportclassdefreturn などがあります。これらは Python の構文の一部であり、変数名として使用できません。

推奨される規則(PEP 8)

PEP 8 は Python の公式スタイルガイドで、業界で広く採用されています:

PYTHON
# 良い名前(一目でわかる)
total_price = 99.9
student_count = 35

# 悪い名前(目的が不明瞭)
a = 99.9
b = 35
💡 ヒント:良いコードの第一条件は「コメントがなくても意図が伝わること」です。変数名を付けることはその第一歩です。良い名前に 5 秒かければ、後でコードを読むときに 5 分節約できます。


3. 基本データ型

Python にはよく使われる 5 つの基本データ型があります:

型名 Python の名前 説明
整数 int 42-11000 小数点のない整数
浮動小数点数 float 3.14-0.52.0 小数点のある数値
文字列 str "Hello"'Python' テキスト。引用符で囲む
ブール値 bool TrueFalse 真/偽を表す。大文字で書く
None NoneType None 「何もない」を表す。大文字で書く
PYTHON
# 各型の変数を定義
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() を使います:

PYTHON
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 は動的型付けです——同じ変数が異なる時点で異なる型を保持できます:

PYTHON
x = 10         # x は整数
print(x)       # 10 を出力
x = "Hello"    # 同じ変数、今は文字列
print(x)       # Hello を出力
x = True       # 今はブール値
print(x)       # True を出力

これは C++ や Java のような静的型付け言語ではできません——一度宣言すると型は固定されます。動的型付けは柔軟性と簡潔なコードを提供しますが、変数の型が予期せず変わると実行時エラーを引き起こす可能性があります(後で例を見ます)。

⚠️ 補足:動的型付けは柔軟ですが、乱用しないでください。実際のプロジェクトでは、混乱を避けるために 1 つの変数は 1 つの型に保ちましょう。


4. print() の詳細機能

レッスン 01 で print() を見ました。さらに便利なテクニックを 2 つ紹介します:

カンマで複数値を出力

PYTHON
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 パラメータを使います:

PYTHON
print("2026", "06", "19", sep="-")
# 出力:2026-06-19

end で行末を制御

デフォルトでは、print() は出力後に改行を追加します。end を使って変更できます:

PYTHON
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 が値を置き換えます。

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.

変数名だけでなく、も中括弧の中に入れられます:

PYTHON
a = 10
b = 3
print(f"{a} + {b} = {a + b}")   # 出力:10 + 3 = 13
print(f"{a} × {b} = {a * b}")   # 出力:10 × 3 = 30

数値のフォーマットも制御できます:

PYTHON
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:変数で個人情報を保存(難易度 ⭐)

個人情報を保存し、出力で参照する方法を示します。

PYTHON
# 個人情報を変数に保存
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")
▶ 試してみよう

出力:

TEXT
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:変数間の演算(難易度 ⭐⭐)

異なる型は異なる演算をサポートします。ルールに注意しましょう。

PYTHON
# 数値演算
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    ← コメントを外して試す
▶ 試してみよう

出力:

TEXT
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 にはエレガントなコードのための簡潔な構文があります:

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
▶ 試してみよう

出力:

TEXT
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 が右側のすべての式を最初に評価し、その後一度に代入するからです。

💡 ヒント:この「Python らしい」スタイルは見栄えが良いですが、多用すると初心者を混乱させる可能性があります。チームプロジェクトでは適度に使いましょう。


よくあるユースケース


❓ よくある質問

Q = は「等しい」という意味ですか?なぜ数学と違うのですか?
A Python では = は代入演算子です。「右側の値を左側の変数に保存する」という意味です。これは等式の宣言ではなく、命令です。2 つの値が等しいかどうかを確認するには ==(等号 2 つ)を使います。初心者の最も一般的な間違いの 1 つは、条件式で == の代わりに = を使ってしまうことです。
⚠️ Q:変数名に中国語の文字を使えますか?Python 3 はサポートしていますよね? A:技術的には Python 3 は中国語の変数名をサポートしていますが(例:姓名 = "Zhang San")、強く推奨されません。ほとんどのプログラミングツール、ライブラリ、コードスニペットは英名を使用しています。言語を混在させると見た目が不自然になり、国際的なチームでのコミュニケーションに支障をきたします。変数名は英語にしましょう。

Q なぜ float は不正確なのですか?なぜ 0.1 + 0.20.30000000000000004 になるのですか?
A これは Python のせいではありません。コンピュータが浮動小数点数を 2 進数で保存する際の根本的な限界です。10 進数で 1/3 = 0.333... を正確に表現できないのと同様に、2 進数では 0.10.2 を正確に表現できません。正確な計算(通貨など)には、float の代わりに decimal モジュールを使用してください。
Q None0、空文字列 "" の違いは何ですか?
A None は「何もない」または「値が存在しない」を意味します。0""False とは異なります。0 は数値、"" は空文字列、False は偽のブール値です——これらはすべて「存在します」が、たまたま空を表しています。None はコンテナ自体がないことを意味します。"" を空のボウルだとすると、None はボウルがない状態です。

📖 まとめ


📝 練習問題

  1. 基本(難易度 ⭐)citytemperatureis_sunny の変数を、あなたの都市名、今日の気温(float)、晴れているか(bool)で定義しましょう。print() を使って完全な文を出力してください。

  2. 中級(難易度 ⭐⭐):2 つの整数変数 minuteshours を定義します。hours を分に変換し、minutes に加算して合計を出力してください。例:hours=2, minutes=15 の場合、135 分を出力します。ヒント:1 時間 = 60 分です。

  3. 挑戦(難易度 ⭐⭐⭐):一時変数を使わずに、3 つの変数を循環シフトでスワップします:a → b → c → a(a は b の元の値を取得、b は c の値を取得、c は a の値を取得)。ヒント:基本となる考え方は a, b, c = b, c, a です。

100%