Python 比較運算子用來比較兩個值之間的關係,結果只會回傳 True 或 False 兩種布林值,是所有條件判斷與流程控制的基礎。本文全面解析六大比較運算子 ==、!=、>、<、>=、<= 的語法與語意,涵蓋型別比較陷阱、字串比較規則、鏈式比較語法,以及在量化策略與條件邏輯中的實戰應用。
什麼是比較運算子?
比較運算子(Comparison Operators)是 Python 用來比較兩個值大小或是否相等的符號,運算結果永遠是布林值 True 或 False。你可以把它想像成一台天秤的裁判——放上兩個砝碼,它只告訴你「左邊重」、「右邊重」或「一樣重」,不給其他答案。
比較運算子是 if、while 等流程控制語法的核心原料。幾乎所有的條件判斷都是由一個或多個比較運算式組成,因此徹底理解它的行為細節,是寫出正確邏輯的必要前提。
核心語法:六大比較運算子
# === 等於 == 與 不等於 != ===
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 條件更接近數學直覺,善用它可以讓條件邏輯的可讀性大幅提升。