Python 比較運算子:== != > < >= <= 全解析

Python 比較運算子用來比較兩個值之間的關係,結果只會回傳 TrueFalse 兩種布林值,是所有條件判斷與流程控制的基礎。本文全面解析六大比較運算子 ==!=><>=<= 的語法與語意,涵蓋型別比較陷阱、字串比較規則、鏈式比較語法,以及在量化策略與條件邏輯中的實戰應用。

Cinematic visualization of Python comparison operators as glowing ancient scales and balance symbols in a dark mystical forge, amber firelight casting deep shadows on stone walls with == != > < symbols carved as runes, dramatic cinematic lighting, 16:9

什麼是比較運算子?

比較運算子(Comparison Operators)是 Python 用來比較兩個值大小或是否相等的符號,運算結果永遠是布林值 TrueFalse。你可以把它想像成一台天秤的裁判——放上兩個砝碼,它只告訴你「左邊重」、「右邊重」或「一樣重」,不給其他答案。

比較運算子是 ifwhile 等流程控制語法的核心原料。幾乎所有的條件判斷都是由一個或多個比較運算式組成,因此徹底理解它的行為細節,是寫出正確邏輯的必要前提。

核心語法:六大比較運算子

# === 等於 == 與 不等於 != ===
print(2 == 2)       # True
print(2 == 1)       # False
print('hello' == 'hello')  # True
print('Hello' == 'hello')  # False(大小寫不同視為不相等)

print(3 != 3)       # False(三等於三,所以「不等於」為假)
print(4 != 5)       # True

# 重要:== 是比較,= 是賦值,兩者完全不同!
x = 10             # 賦值,x 的值為 10
print(x == 10)     # True(比較 x 是否等於 10)
= 是賦值(assignment),== 是相等比較(equality check)——這是初學者最常混淆的地方。在 if 條件式中誤用單個 = 會直接觸發 SyntaxError,Python 會提醒你。
# === 大於 > 與 小於 < ===
print(5 > 3)        # True
print(3 > 5)        # False
print(3 > 3)        # False(不包含等於)

print(1 < 2)        # True
print(2 < 2)        # False(不包含等於)

# === 大於等於 >= 與 小於等於 <= ===
print(5 >= 5)       # True(等於也成立)
print(4 >= 5)       # False
print(3 <= 3)       # True(等於也成立)
print(4 <= 3)       # False

# 實際應用:判斷收盤價是否突破關鍵價位
close_price = 158.5
key_level = 155.0

if close_price >= key_level:
    print("收盤站上關鍵支撐")   # 收盤站上關鍵支撐
>>= 的差別在於「臨界值是否包含」。若門檻條件需要「至少達到」某個值(例如身高 ≥ 120cm 才能乘坐),必須使用 >= 而非 >,否則剛好等於門檻的情況會被錯誤排除。

規則與注意事項

規則 正確範例 錯誤範例 / 陷阱
== 比較,不是 = 賦值 if x == 10: if x = 10: → SyntaxError
字串比較區分大小寫 'apple' == 'apple' → True 'Apple' == 'apple' → False
int 與 float 相等比較可互通 2 == 2.0 → True 不需要手動轉型
字串不能直接與數字比較大小 str(5) == '5' → True 5 > '3' → TypeError
字串相等比較使用字典序(lexicographic) 'b' > 'a' → True 誤以為只有數字能比大小

常見錯誤與防呆

錯誤一:在 if 條件式中誤用 = 賦值

# ❌ 錯誤寫法(SyntaxError: invalid syntax)
x = 5
if x = 5:       # 應該是 ==,不是 =
    print("相等")

# ✅ 正確寫法
if x == 5:
    print("相等")   # 相等

錯誤二:字串與數字直接比較大小

# ❌ 錯誤寫法(TypeError: '>' not supported between instances of 'str' and 'int')
user_input = input("請輸入數字:")   # input() 回傳字串
if user_input > 10:                  # 字串不能直接與 int 比較
    print("大於 10")

# ✅ 正確寫法:先轉型再比較
if int(user_input) > 10:
    print("大於 10")

錯誤三:誤以為浮點數可以用 == 精確比較

# ❌ 浮點數精度陷阱(結果可能是 False!)
result = 0.1 + 0.2
print(result == 0.3)   # False!(0.1 + 0.2 = 0.30000000000000004)

# ✅ 正確做法:改用容差範圍比較
tolerance = 1e-9
print(abs(result - 0.3) < tolerance)   # True

進階用法

Python 鏈式比較(Chained Comparison)

Python 獨特地支援鏈式比較,可以把多個比較條件串接成一行,類似數學的「不等式連寫」,不需要用 and 連接,語意更直觀。

# 一般寫法(使用 and)
x = 15
if x > 10 and x < 20:
    print("x 在 10 到 20 之間")

# Python 鏈式比較(更簡潔,直接模擬數學不等式)
if 10 < x < 20:
    print("x 在 10 到 20 之間")   # x 在 10 到 20 之間

# 也可以多段連寫
score = 85
if 60 <= score < 70:
    print("C 級")
elif 70 <= score < 80:
    print("B 級")
elif 80 <= score <= 100:
    print("A 級")   # A 級

比較字串:字典序規則

字串比較依照 Unicode 碼點(字典序)進行,英文字母大寫(A-Z)的碼點比小寫(a-z)小,因此 'Z' < 'a'True。這在排序或判斷字串大小時必須特別注意。

# 字串比較:逐字元依 Unicode 碼點比較
print('apple' < 'banana')    # True('a' < 'b')
print('abc' < 'abd')         # True(前兩字元相同,'c' < 'd')
print('Z' < 'a')             # True(大寫 Z = 90,小寫 a = 97)

# 忽略大小寫比較:先統一轉小寫
s1 = 'Hello'
s2 = 'hello'
print(s1 == s2)              # False(直接比較)
print(s1.lower() == s2.lower())  # True(轉小寫後比較)

量化實戰:多條件篩選信號

在量化策略中,比較運算子通常與多個技術指標閾值結合,用來篩選符合條件的進場信號。

# 情境:RSI 指標多空判斷
rsi = 28.5
close = 102.3
ma20 = 105.0

# 比較運算子組合條件篩選
oversold   = rsi < 30            # RSI 超賣
below_ma   = close < ma20        # 收盤價低於均線
near_low   = close <= 103.0      # 接近低點區間

print(f"超賣信號:{oversold}")    # 超賣信號:True
print(f"低於均線:{below_ma}")    # 低於均線:True
print(f"接近低點:{near_low}")    # 接近低點:True

# 三個條件同時滿足才考慮進場(搭配第 14 篇邏輯運算子)
if oversold and below_ma and near_low:
    print("潛在買入信號觸發")

煉金坊小叮嚀

比較運算子是整個 Python 邏輯體系的地基,看似簡單卻有幾個容易踩坑的細節。最值得記住的一點:浮點數永遠不要用 == 直接比較,改用絕對值差距 abs(a - b) < 1e-9 才是正確做法。我在量化回測中就曾因為 0.1 + 0.2 != 0.3 的精度問題,讓某個條件永遠不觸發,排查了很久才找到原因。另外,Python 的鏈式比較 10 < x < 20 是很優雅的語法,比起兩個 and 條件更接近數學直覺,善用它可以讓條件邏輯的可讀性大幅提升。

張貼留言

較新的 較舊