Python 入門

Python 演算子

演算子はあらゆるプログラミング言語の骨組みです。これらを使用することで、計算の実行、データの比較、そしてプログラムの実行フローの制御が可能になります。

Python における演算子 (Operators) は、算術、比較、または論理演算を実行するための特別な記号です。これらを効率的に使いこなすことは、堅牢で効率的なコードを書くための鍵となります。

本章では、Python の算術、比較、論理演算子について包括的なオーバービューを提供し、プログラム内でのデータ操作と意思決定を行う能力を身につけていきます。

1. 算術演算子

算術演算子は数学的な計算を行うために使用されます。Python は多様な算術演算子をサポートしており、それぞれに特定の機能があります。

1.1 基礎的な算術演算子

  • 加算 (+): 2つのオペランド(被演算子)を足し合わせます。
x = 5
y = 3
sum_result = x + y  # 結果は 8
print(sum_result)
  • 減算 (-): 最初のオペランドから2番目のオペランドを引きます。
x = 5
y = 3
difference_result = x - y  # 結果は 2
print(difference_result)
  • 乗算 (*): 2つのオペランドを掛け合わせます。
x = 5
y = 3
product_result = x * y  # 結果は 15
print(product_result)
  • 除算 (/): 最初のオペランドを2番目のオペランドで割ります。注意: Python では除算の結果は、両方のオペランドが整数であっても常に浮動小数点数(フロート)になります。
x = 5
y = 3
division_result = x / y  # 結果は約 1.6666666666666667
print(division_result)

1.2 アドバンスな算術演算子

  • 切り捨て除算 (//): 除算を行い、小数点以下を切り捨てた整数部分のみを返します(結果以下の最大の整数)。
x = 5
y = 3
print(x // y)  # 出力: 1

# 負数の切り捨ての注意点:-1.66 の切り捨ては -2 になります
x = -5
print(x // y)  # 出力: -2
  • 剰余演算 (%): 除算の結果の「余り」を返します。
x = 5
y = 3
modulus_result = x % y  # 5割る3は1余り2。結果は 2
print(modulus_result)
実戦シナリオ: 数値が奇数か偶数かを判断する際によく使われます。number % 20 であれば偶数、そうでなければ奇数です。
  • べき乗 (**): 最初のオペランドを2番目のオペランドの数だけ累乗します。
x = 5
y = 3
exponentiation_result = x ** y  # 5の3乗 (5 * 5 * 5)。結果は 125
print(exponentiation_result)

1.3 演算子の優先順位 (PEMDAS)

一つの式に複数の演算子が含まれる場合、Python は特定の順序に従って計算します。これは数学のルールと一致しており、一般に PEMDAS と覚えられます。

  1. Parentheses:括弧 ()(最優先)
  2. Exponents:べき乗 **
  3. Multiplication / Division:乗算 *、除算 /、切り捨て除算 //、剰余 %(左から右へ)
  4. Addition / Subtraction:加算 +、減算 -(左から右へ)

ベストプラクティス: 厳密には不要な場合でも、括弧を使用して計算順序を明示的に定義することを強くお勧めします。これによりコードの可読性が劇的に向上し、ロジックエラーを防ぐことができます。

result = 5 + 3 * 2  # 乗算が加算より先に実行され、結果は 11
print(result)

result = (5 + 3) * 2  # 括弧により加算が先に実行され、結果は 16
print(result)

2. 比較演算子

比較演算子は2つの値を対比させ、その関係に基づいてブール値(True または False)を返します。

2.1 比較演算子の種類

  • 等価 (==): 両側の値が等しい場合に True を返します。(代入演算子 = と混同しないよう注意)
x = 5
y = 5
print(x == y)  # 出力: True
  • 不等価 (!=): 両側の値が等しくない場合に True を返します。
x = 5
y = 10
print(x != y)  # 出力: True

より大きい (>) / より小さい (<): 左側が右側よりも大きい、あるいは小さいかを判断します。

x = 5
y = 3
print(x > y)   # 出力: True
print(x < y)   # 出力: False
  • 以上 (>=) / 以下 (<=): 等しい場合も条件に含まれます。
x = 5
y = 5
print(x >= y)  # 出力: True
print(x <= y)  # 出力: True

2.2 データ型をまたぐ比較の注意点

比較演算子は異なるデータ型にも使用できますが、Python の内部メカニズムを理解しておく必要があります。

  • 数値: その数値の大きさに基づいて比較されます(整数と浮動小数点数の混在比較も可能です)。
  • 文字列: 辞書順(文字の Unicode 値に基づく)で一文字ずつ比較されます。
print("apple" < "banana")  # 出力: True('a' は 'b' より前にあるため)
  • 混合タイプ: 全く異なるデータ型(例:文字列 "5" と整数 3)を比較しようとすると、Python 3 では通常 TypeError が発生します。比較する値が同じ型であることを確認してください。

3. 論理演算子

論理演算子は、複数のブール式を組み合わせたり、修正したりするために使用されます。これらはコード内で複雑な判断条件を構築するための基石となります。

3.1 論理演算子の種類

  • and (論理積): 両側の条件がともに True の場合のみ、結果が True になります。
x = 5
y = 3
# 両方の条件が成立するため True
print(x > 0 and y < 10)  # 出力: True
# 一方の条件が成立しないため False
print(x > 0 and y > 10)  # 出力: False

実戦シナリオ: 特定の機能へのアクセスを許可する前に、ユーザーが「ログイン済み」かつ (and)「管理者権限を持っている」かどうかをチェックします。

  • or (論理和): 少なくとも一方が True であれば、結果は True になります。
x = 5
y = 3
# y < 10 が成立するため、式全体として True
print(x < 0 or y < 10)   # 出力: True
# 両方の条件が不成立のため False
print(x < 0 or y > 10)   # 出力: False

実戦シナリオ: ユーザーの「メールアドレスが未認証」または (or)「電話番号が未認証」の場合に、リマインド通知を送信します。

  • not (論理否定): オペランドの真偽値を反転させます。真は偽に、偽は真になります。
condition = True
print(not condition)  # 出力: False

実戦シナリオ: ユーザーが管理者でない (not) ことを確認し、その場合は一般ユーザーインターフェースにリダイレクトします。

3.2 論理演算子の組み合わせと「短路評価(ショートサーキット)」

論理演算子を組み合わせることで非常に複雑な条件を作成できます。括弧を使用することで計算順序を制御できます。

x = 5
y = 3
z = 10
# (True and True) or True -> True or True -> True
result = (x > 0 and y < 5) or z == 10  
print(result) # 出力: True

核心メカニズム:短絡評価 (Short-Circuit Evaluation)

Python は論理演算を処理する際、パフォーマンスの向上とエラー防止のために「短絡(ショートサーキット)」メカニズムを採用しています。

  • and の場合: 最初の条件が False であれば、2番目の条件を確認することなく、全体の計算を終了し False を返します(全体の結果が False になることが確定しているため)。
  • or の場合: 最初の条件が True であれば、2番目の条件を確認することなく、全体の計算を終了し True を返します(全体の結果が True になることが確定しているため)。
def some_function():
    print("この関数が呼び出されました!")
    return True

x = 5
# x < 0 は False。and 演算において結果は False が確定。
# そのため some_function() は実行されません。
result = x < 0 and some_function()

# x > 0 は True。or 演算において結果は True が確定。
# そのため some_function() はやはり実行されません。
result = x > 0 or some_function()