Python: 演算子の基本と概要

最終更新:2026-09-22

プログラミングとは本質的に「データに対する操作」です。レッスン 02 では変数を学びました。次は演算子について学びましょう——Python が提供する計算機能です。算術、比較、論理判断、文字列連結……このレッスンが終われば、Python で多くの実世界の問題を解決できるようになります。


関連するキーワード/文:float False True None

1. 算術演算子

レッスン 02 でいくつかの演算子を使いました。完全なリストは以下の通りです:

演算子 名前 例 結果 備考
+ 加算 5 + 3 8 文字列連結にも使用
- 減算 5 - 3 2 負号としても使用:-5
* 乗算 5 * 3 15 文字列の繰り返しにも使用
/ 除算 5 / 3 1.666... 常に float を返す
// 切り捨て除算 5 // 3 1 切り捨て、小数部分を破棄
% 剰余 5 % 3 2 除算の余り
** 累乗 5 ** 3 125 5 の 3 乗

(1) 注目すべき 2 つの演算子

/(除算)の特徴:

PYTHON
print(4 / 2)    # 出力 2.0、2 ではない

多くの人がここで戸惑います:4 割る 2 は明らかに 2 なのに、なぜ Python は 2.0 を出力するのでしょうか?Python の / は常に float を返すからです。たとえ割り切れてもです。これにより結果が予測可能になります——/ を見れば結果が float になるとわかります。

//(切り捨て除算)の落とし穴:

PYTHON
print(7 // 3)     # 出力 2(7 ÷ 3 = 2.333、切り捨て = 2)
print(-7 // 3)    # 出力 -3 ← 予想と違うかもしれません

-7 // 3 は -3 を返し、-2 ではありません。Python の // は切り捨て除算(負の無限大方向への丸め)であり、「ゼロ方向への切り捨て」ではありません。数直線上で、-2.333 の切り捨ては -3 です。ゼロ方向への切り捨てが必要な場合は int(-7 / 3) を使います。これは -2 を返します。

💡 ヒント:// は「整数除算」ではなく「切り捨て除算」と考えましょう。「整数除算」は切り捨てを意味し、負の数では成り立ちません。

▶ サンプル:インチとセンチメートルの変換(難易度 ⭐)

▶ 試してみよう

出力:

TEXT 📖 参照専用
12 inches = 30.48 cm
30 cm = 11.81 inches
12 inches can be divided into 2 segments of 5 inches, with 2 inches left


2. 比較演算子

比較演算子は値間の関係を評価し、常にブール値(True または False)を返します。条件ロジックの基礎です。

演算子 名前 例 結果
== 等しい 5 == 3 False
!= 等しくない 5 != 3 True
> より大きい 5 > 3 True
< より小さい 5 < 3 False
>= 以上 5 >= 5 True
<= 以下 5 <= 3 False
PYTHON
age = 18
print(age == 18)     # True(ちょうど 18)
print(age != 18)     # False(「等しくない」ではない)
print(age > 21)      # False(米国の飲酒年齢に達していない)
print(age >= 18)     # True(ちょうど成人年齢、条件を満たす)

(1) 連鎖比較

Python は他の言語では珍しい簡潔な構文をサポートしています:

PYTHON
x = 15
print(10 < x < 20)   # True(10 < x and x < 20 と同等)
print(0 < x < 10)    # False

これは 10 < x and x < 20 よりも自然に読めます。数学の表記法のようです。

(2) is と is not(同一性比較)

厳密には is は比較演算子ではありませんが、== とよく比較されます:

PYTHON
a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a == b)     # True(同じ内容)
print(a is b)     # False(しかし同じオブジェクトではない)
print(a is c)     # True(c は a の別名)

日常の開発では、99% のケースで == を使います。is を使うのは None をチェックするときだけというのが慣習です:if result is None:。

▶ サンプル:レースグループ分類(難易度 ⭐)

▶ 試してみよう

出力:

TEXT 📖 参照専用
Participant age: 14
Junior group (12-15): True
Youth group (16-20): False
Age verified: True
Age not verified: False


3. 論理演算子

論理演算子は複数の条件を組み合わせ、結果もブール値になります。if 文やループ条件で頻繁に使用します。

演算子 名前 例 結果 備考
and 論理 AND True and False False 両方が true の場合のみ true
or 論理 OR True or False True 少なくとも 1 つが true なら true
not 論理 NOT not True False 否定
PYTHON
age = 20
has_id_card = True

# and:両方の条件を満たす必要がある
print(age >= 18 and has_id_card)   # True(成人で ID あり)

# or:少なくとも 1 つの条件
print(age >= 18 or has_id_card)    # True(実際には両方満たしている)

# not:否定
print(not has_id_card)             # False(not True = False)

(1) 真理値表

a b a and b a or b not a
True True True True False
True False False True False
False True False True True
False False False False True

(2) ショートサーキット評価

Python の論理演算子には重要な機能があります:ショートサーキット評価です。

PYTHON
# and の場合:左辺が False なら右辺は評価されない
def say_yes():
    print("say_yes was called")
    return True

print(False and say_yes())   # 出力 False — say_yes は実行されない
print(True and say_yes())    # 出力 "say_yes was called" と True

# or の場合:左辺が True なら右辺は評価されない
print(True or say_yes())     # 出力 True — say_yes は実行されない

これは実際のプログラミングで非常に便利です:

PYTHON
# ユーザーが存在する場合のみユーザー名を取得 — None.get() エラーを回避
user = None
username = user and user.get("name")   # user は None(falsy)、ショートサーキット、username = None
print(username)                        # None

user = {"name": "Xiao Ming"}
username = user and user.get("name")   # user は truthy、右辺を評価、username = "Xiao Ming"
print(username)                        # Xiao Ming
💡 ヒント:ショートサーキット評価はパフォーマンスを向上させるだけでなく、エラーも防止します。user and user.get("name") パターンは Python でよく使われます——「安全なアクセス」を保証します。左辺が falsy なら直接それを返し、エラーの可能性がある右辺は評価しません。

▶ サンプル:数値が「特別」かどうかを確認(難易度 ⭐⭐)

比較演算子と論理演算子を組み合わせて、数値が特定の「特別な条件」を満たすかどうかを確認します。

▶ 試してみよう

出力:

TEXT 📖 参照専用
Number: 49
In range (10-99): True
Multiple of 7: True
Contains digit 7: False
Is special: True

Number 200: first condition is False, second won't execute — False


4. 代入演算子

基本的な = に加えて、Python は複合代入演算子を提供します:

PYTHON
x = 10         # 基本代入
x += 3         # x = x + 3 と同等、結果:13
x -= 2         # x = x - 2 と同等、結果:11
x *= 2         # x = x * 2 と同等、結果:22
x /= 4         # x = x / 4 と同等、結果:5.5
x //= 2        # x = x // 2 と同等、結果:2.0
x %= 2         # x = x % 2 と同等、結果:0.0
x **= 3        # x = x ** 3 と同等、結果:0.0

x = 10 は整数ですが、x /= 4 の後は 5.5(float)になることに注意してください。これは / が常に float を返すためです。整数結果が必要な場合は //= を使用してください。

PYTHON
# ループ内での典type的なインクリメント
score = 0
score += 10      # 10 点追加
score += 20      # さらに 20 追加
score += 15      # さらに 15 追加
print(f"Final score: {score}")   # 45

# stringでも複合代入は動作
message = "Hello"
message += " "   # スペースを追加
message += "World"
print(message)               # "Hello World"
💡 ヒント:x += 1 は Python の「1 をインクリメント」の方法です。他の言語では x++ と書きます。Python には ++ 演算子はありません。+= 1 を使用してください。



5. 文字列演算子

文字列には独自の「演算」があります——厳密には数学的ではありませんが、同じ記号を使用します。

演算子 目的 例 結果
+ 連結 "Hello" + " " + "World" "Hello World"
* 繰り返し "Ha" * 3 "HaHaHa"
in メンバーシップ "Py" in "Python" True
not in 非メンバーシップ "xyz" not in "Python" True
PYTHON
# string連結
first_name = "Zhang"
last_name = "San"
full_name = first_name + last_name
print(full_name)              # 出力 "Zhang San"

# stringの繰り返し — 区切り線の描画に便利
line = "=" * 30
print(line)                   # 30 個の等号を出力

# メンバーシップチェック(in / not in)
text = "Hello, Python!"
print("Python" in text)       # True — 「Python」は text の一部
print("Java" in text)         # False — text に「Java」は含まれない
print("Java" not in text)     # True — 確かに「含まれていない」
⚠️ 補足:+ は 2 つの文字列間でのみ機能し、文字列と数値の間では機能しません。"Age: " + 25 はエラーになります。先に数値を変換してください:"Age: " + str(25)。* は文字列と整数の間でのみ機能します——"AB" * 3 は OK、"AB" * "CD" は不可です。

▶ サンプル:文字列演算で名刺を生成(難易度 ⭐⭐)

TEXT 📖 参照専用
# string演算を使って簡単な名刺を生成

name = "Li Ming"
title = "Python Engineer"
company = "Tech Co., Ltd."

# + でカード内容を連結
card_line1 = "Name: " + name
card_line2 = "Title: " + title
card_line3 = "Company: " + company

# * で区切り線を生成
separator = "-" * 25

# 完全なカードに結合
business_card = separator + "\n" + card_line1 + "\n" + card_line2 + "\n" + card_line3 + "\n" + separator

print("Generated Business Card:")
print(business_card)

# in で特定の情報を含むか確認
search_term = "Python"
print(f"\nDoes card contain \"{search_term}\"? {search_term in business_card}")

# not in で特定の情報を除外
print(f"Card doesn't contain \"Manager\": {\"Manager\" not in business_card}")

出力:

TEXT 📖 参照専用
Generated Business Card:
-------------------------
Name: Li Ming
Title: Python Engineer
Company: Tech Co., Ltd.
-------------------------

Does card contain "Python"? True
Card doesn't contain "Manager": True


6. 演算子の優先順位

数学に「乗算は加算より先」があるように、Python にも演算子の優先順位があります。

優先順位 カテゴリ 演算子 備考
高 累乗 ** 右結合
↓ 単項 +x、-x、not 正/負、論理 NOT
↓ 算術 *、/、//、% 乗算、除算、切り捨て、剰余
↓ 算術 +、- 加算、減算
↓ 比較 ==、!=、>、<、>=、<= 比較
↓ 論理 not 論理 NOT
↓ 論理 and 論理 AND
↓ 論理 or 論理 OR
低 代入 =、+= など 代入
PYTHON
# 乗算は加算より先
result = 2 + 3 * 4
print(result)                # 14(3*4=12、+2)

# 比較は算術より優先順位が低い
print(2 + 3 * 4 > 10)        # True(14 > 10)

# 論理は最も低い — 先に比較を行い、その後論理結合
age = 20
print(age > 18 and age < 60)  # True(最初に age>18 と age<60、次に and)

# 累乗は右結合
print(2 ** 3 ** 2)            # 512(最初に 3²=9、次に 2⁹=512)
print((2 ** 3) ** 2)          # 64(括弧あり:最初に 2³=8、次に 8²=64)

# 括弧で優先順位を変更 — 数学と同じ
result = (2 + 3) * 4
print(result)                 # 20(最初に 2+3=5、次に ×4)

▶ サンプル:住宅ローンの計算(難易度 ⭐⭐)

▶ 試してみよう

出力:

TEXT 📖 参照専用
Loan amount: 1,000,000 yuan
Annual rate: 4.5%
Loan term: 30 years
Monthly payment: 5,066.85 yuan
Total repayment: 1,824,066.95 yuan
Total interest: 824,066.95 yuan
💡 ヒント:1_000_000 のアンダースコアは人間の可読性のためだけです——Python はそれらを無視します。これは Python 3.6+ の機能で、数値を見やすく区切ります。優先順位を覚えられませんか?括弧を使いましょう——上の式は括弧のおかげで誰にでも明確です。



7. 浮動小数点数の精度問題

すべてのプログラマーが遭遇する問題です:

PYTHON
print(0.1 + 0.2)                     # 出力 0.30000000000000004
print(0.3)                           # 出力 0.3
print(0.1 + 0.2 == 0.3)              # 出力 False ← 等しくない!

これは Python のバグではなく、浮動小数点数を2 進数で保存することの根本的な限界です。10 進数で 1/3 = 0.33333... を正確に表現できないのと同様に、2 進数では 0.1 を正確に表現できません。

(1) 注意すべきケース

PYTHON
# float の正しい比較方法
result = 0.1 + 0.2
epsilon = 1e-10     # 非常に小さい数、約 0.0000000001
print(abs(result - 0.3) < epsilon)   # 出力 True
PYTHON
print(f"{0.1 + 0.2:.2f}")   # 出力 0.30
PYTHON
# 実際の例:0.1 を 10 回加算
total = 0.0
for i in range(10):
    total += 0.1
print(f"Accumulated result: {total}")          # 0.9999999999999999
print(f"Exactly 1.0: {total == 1.0}")          # False
print(f"Formatted: {total:.2f}")               # 1.00 — 表示は問題ない
⚠️ 補足:日常の学習では、浮動小数点数の精度がプログラミングロジックの理解に影響することはありません。2 つのルールだけ覚えておけば大丈夫です:「float の比較に == を直接使わない」そして「お金の計算には decimal モジュールを使う」。



8. 数値型変換

Python は数値型間の変換関数をいくつか提供しています:

PYTHON
# int → float
print(float(3))             # 出力 3.0

# float → int(ゼロ方向への切り捨て、四捨五入ではない)
print(int(3.14))            # 出力 3
print(int(-2.8))            # 出力 -2(ゼロ方向への切り捨て)

# string → 数value(stringが実際に数valueを表している場合のみ)
print(int("42"))            # 出力 42
print(float("3.14"))        # 出力 3.14

# 数value → string
print(str(3.14))            # 出力 "3.14"

# int() は基数も指定可能
print(int("FF", 16))        # 出力 255(16 進数 FF を 10 進数に)
print(int("1010", 2))       # 出力 10(2 進数 1010 を 10 進数に)

▶ サンプル:実際の型変換(難易度 ⭐)

▶ 試してみよう

出力:

TEXT 📖 参照専用
You entered: 25 (type: <class 'str'>)
After conversion: 25 (type: <class 'int'>)
Next year you'll be 26 years old
You are 25 years old


9. よくあるユースケース


関連するキーワード/文:float False True None

❓ よくある質問

Q == と is の違いは何ですか?それぞれいつ使うべきですか?
A == は「値」を比較(「内容は同じか?」)、is は「同一性」を比較(「同じオブジェクトか?」)します。例:a = [1, 2]; b = [1, 2]; c = a の場合、a == b は True(同じ値)ですが、a is b は False(異なるリストオブジェクト)。a is c は True(c は別名)。日常の開発では 99% == を使います。None のチェックでは慣習的に is を使います:if result is None:。
Q / と // はいつ使い分ければよいですか?
A 正確な小数結果が必要な場合(例:7 ÷ 3 = 2.333...)は / を使います。整数結果のみが必要な場合(例:7 つのリンゴを 3 人で分ける——1 人 2 個、1 個余り)は、// と % を使います。初心者で迷ったら、デフォルトで / を使いましょう——少なくとも精度を失うことはありません。整数結果が具体的に必要な場合に // に切り替えてください。
Q べき乗演算子が右結合とはどういう意味ですか?なぜそのように設計されているのですか?
A 右結合とは、2 ^ 3 ^ 2 が 2 ^ (3 ^ 2) と解析されることで、最初に 3²=9、次に 2⁹=512 と計算されます。左から右なら (2³)²=8²=64 で、まったく異なる結果です。数学の慣習(a^b^c は右上から)に従っています。順序を強制するには括弧を使いましょう:(2 ^ 3) ^ 2 は 64 になります。

📖 まとめ


📝 練習問題

  1. 基本(難易度 ⭐):a=10、b=3、c=20 を定義し、a + b * c、(a + b) * c、a ** b、a // b、c % a、a > b and c > 15 を計算して出力してください。まず結果を予想し、その後確認しましょう。

  2. 中級(難易度 ⭐⭐):year = 2026 を指定して、うるう年かどうかを判定してください。うるう年のルール:4 で割り切れるが 100 では割り切れない、または 400 で割り切れる。ヒント:year % 4 == 0 で 4 で割り切れるかどうかを確認。

  3. 挑戦(難易度 ⭐⭐⭐):簡単な温度警報システムを書いてください。current_temp = 38、high_alarm = 37、low_alarm = 5 が与えられています。現在の温度が上限を超えるか下限を下回った場合に警報を発します。温度が境界付近(±2 度以内)の場合は「警報」ではなく「注意報」を出します。算術演算子、比較演算子、論理演算子のみを使用してください。ヒント:abs(current_temp - high_alarm) <= 2 で上限付近かどうかを確認。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%