iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Software Development

Python 小白的逆襲:30 天從零到能教人的精華筆記,寫給迷惘的你與當年的我自己!系列 第 7

【Day7】真假大對決!程式怎麼判斷世界?:關係運算子 & 邏輯運算

  • 分享至 

  • xImage
  •  

前言

「程式世界很簡單,只有兩種狀態:True 或 False。」

「但問題是,怎麼判斷哪個是真的、哪個是假的呢?」

在前幾天的學習中,我們先認識了 變數與資料型別,知道可以把不同型別的資料存放到變數裡。
昨天(Day6)則玩了各種數字、文字的運算對吧!
但是,程式並不只要會算,它還要能「判斷」。

想想看,這些問題是不是更貼近「現實生活」:

  • 這個人是不是成年了?
  • 這筆消費有沒有超出預算?
  • 我的名字有沒有在名單裡?

畢竟程式的出現,就是要解決日常生活中的困擾吧?

今天,我們就要正式進入 關係與邏輯判斷的世界
我們會先認識 (關係)比較運算子,用來比較大小、檢查相等;
再學習 邏輯運算子,用來組合多個條件。

這些工具將會是未來 if 條件判斷 的基石,讓程式能夠根據不同情況做出選擇。

ㄧ、 關係(比較)運算子(比較大小、相等性等)

運算子 說明 範例 結果
== 等於 5 == 5 True
!= 不等於 5 != 3 True
> 大於 7 > 4 True
>= 大於或等於 7 >= 7 True
< 小於 3 < 8 True
<= 小於或等於 3 <= 2 False
in 是否存在於序列中 'a' in 'cat' True
not in 是否不存在於序列 'z' not in 'cat' True
is 是否指向同一個物件 x is y 視情況
is not 是否不是同一物件 x is not y 視情況

⚠️ 常見錯誤示範:= vs ==

初學者最常遇到的 bug,就是搞錯「賦值」跟「比較相等」。

x = 5       # 把 5 存進 x,這叫「賦值」
print(x)    # 輸出 5

print(x == 5)  # True,因為 x 的值等於 5
print(x = 5)   # 錯誤!這裡不能用賦值

💡 小提醒:

  • = 用來「指定」變數的值。
  • == 用來「判斷」兩個值是否相等。

我們先來看個生活化的例子!

生活化案例一:ATM 判斷密碼

假設你去 ATM 提款,輸入的密碼必須跟設定密碼相符,才能進入下一步。

password = "1234"
user_input = input("請輸入密碼: ")

if user_input == password:
    print("密碼正確,歡迎使用 ATM!")
else:
    print("密碼錯誤,請重新輸入。")

這裡就用到了比較運算子 ==
幫我們判斷「輸入的密碼」是不是跟「設定密碼」一樣。

我這邊有另外做一張投影片解釋「關係vs邏輯」!可以參考一下~

https://ithelp.ithome.com.tw/upload/images/20250921/20164721uBJqEywPws.png

我們來看一下範例:(可以發現在關係運算上面的輸出結果會是布林值!)

a = 10
b = 7
print(a > b)    # True
print(a == b)   # False
print(a != b)   # True

範例:布林值比較

布林值也可以參與比較,True 會被視為 1,False 會被視為 0:

a = True
b = False
print(a == b)   # False,True 不等於 False
print(a != b)   # True,兩者不同
print(a > b)    # True,True>False 相當於 1>0
print(a >= b)   # True,1 >= 0
print(a < b)    # False,1<0 不成立
print(a <= b)   # False,1<=0 不成立

上面介紹的關係運算子是屬於「數值」層面的,
接下來我會再多介紹有關「序列關係運算」以及「物件類別關係運算」。

序列關係運算子(in / not in)

有時候我們想知道,一個元素是不是存在於某個集合(list、字串、tuple…)裡,
這時候就用 innot in

符號 說明 範例 結果
in 判斷元素是否存在 "a" in "apple" True
not in 判斷元素是否不存在 "b" not in "apple" True

範例:字串與清單

word = "apple"
print("a" in word)       # True,因為 "a" 在 "apple" 裡
print("b" not in word)   # True,因為 "b" 不在 "apple" 裡

fruits = ["apple", "banana", "cherry"]
print("banana" in fruits)     # True,因為banana有出現在fruits這個list
print("orange" not in fruits) # True,因為orange沒有出現在fruits這個list

物件類別運算子(is / is not)

isis not 用來判斷 兩個物件是否為同一個物件(比的是記憶體位址),而不是單純值相等。

符號 說明 範例 結果
is 是否為同一個物件 a is b True / False
is not 是否不是同一個物件 a is not b True / False

我們來看一下範例:

x = [1, 2, 3]
y = [1, 2, 3]
z = x

print(x == y)    # True,因為內容一樣
print(x is y)    # False,雖然值相同,但記憶體位置不同
print(x is z)    # True,因為 z 指向的就是 x

print(x is not y) # True

💡 小提醒:

  • == 比較的是「值是否相等」
  • is 比較的是「是不是同一個物件」

這兩個常常被新手搞混!(我也踩過這個坑)

二、邏輯運算子:多條件判斷

光會比較還不夠,生活中的問題通常更複雜。

例如:「我今天有沒有時間看電影?」可能取決於兩件事:

  • 工作做完了沒?
  • 朋友有沒有約?

這時候,我們就需要 邏輯運算子 來把條件組合在一起。

我一樣做了一個統整的slide給大家做參考!

https://ithelp.ithome.com.tw/upload/images/20250921/20164721kgAJ38Otez.png

(可以參考一下表格下方的紅字(口訣)!到目前爲止我也都是這樣背)

1. 常見邏輯運算子

運算子 說明 範例 結果
and 兩者都為真,結果才為真 True and False False
or 只要有一個為真,結果就為真 True or False True
not 將布林值反轉 not True False

範例:

a = True
b = False

print(a and b)  # False,因為兩個條件不全為真
print(a or b)   # True,只要一個為真即可
print(not a)    # False,把 True 反轉成 False

2. XOR(互斥或)

Python 沒有內建關鍵字 xor,但我們可以用 位元運算子 ^ 來達到布林的互斥或效果:

  • 當兩個值不同時 → 結果為 True
  • 當兩個值相同時 → 結果為 False
運算子 說明 範例 結果
^ XOR,僅一真一假時才為真 True ^ False True
a = True
b = False
c = True

print(a ^ b)  # True,一真一假
print(a ^ c)  # False,因為兩個都 True
print(b ^ b)  # False,因為兩個都 False

💡 小提醒:

  • ^ 在數字中是「位元 XOR」,但套用在布林值上,也能達成我們想要的「互斥或」。
  • 實務上,xor 常用在「只能選一個」的邏輯,例如:會員登入方式(用 Google 或 Facebook 登入,但不能兩個同時)。

接下來,我們來一起看範例!

練習一:身高體檢(比較運算子)

我們來檢查四個人的身高,看看誰的身高是否介於 180 到 185 公分之間;
同時也檢查體重是否符合標準範圍(70 到 90 公斤之間)。

# 四個人的身高 (公分)
h1, h2, h3, h4 = 175, 180, 184, 190

print(h1 >= 180 and h1 <= 185)   # False,175 不在範圍內
print(h2 >= 180 and h2 <= 185)   # True,180 在範圍內
print(h3 >= 180 and h3 <= 185)   # True,184 在範圍內
print(h4 >= 180 and h4 <= 185)   # False,190 太高了

# 四個人的體重 (公斤)
w1, w2, w3, w4 = 95, 85, 75, 65

print(70 < w1 < 90)   # False,95 超標
print(70 < w2 < 90)   # True,85 剛剛好
print(70 < w3 < 90)   # True,75 剛好符合
print(70 < w4 < 90)   # False,65 太輕了

練習二:邏輯反轉(not 與邏輯運算子)

接下來,我們把「not」跟「and / or」搭配起來玩一玩:

# 四個人的身高、體重
h1, h2, h3, h4 = 172, 179, 183, 188
w1, w2, w3, w4 = 92, 85, 78, 68

print(not h2 < 180)  
 # True,因為 h2=179,不滿足 <180 → 反轉後為 True
 
print(not h3 < 180)                  
# True,183 本來就 >180,反轉後仍然 True

print(not (h1 > 180 and w1 < 80))    
# True,因為 h1>180 不成立 → and 為 False → not 變 True

print(not h2 > 180 or not w2 < 80)   
# True,h2=179 不大於180 → not True → or 判斷整體為 True

print(not (h3 > 180 or w3 < 80))    
 # False,因為 h3=183>180 → or 為 True → not False
 
print(not h4 > 180 and not w4 < 80)  
# False,h4=188>180 → not False;w4=68<80 → not False;最後 and False

結語

今天我們正式進入了程式設計裡「邏輯思考」的領域。

比較運算子==, !=, >, <, in, is…)到 邏輯運算子and, or, not, xor),你會發現 Python 不只會算數學,還能幫我們回答各種「是或否」的問題。

  • 你考試分數是不是有及格?
  • 你的名字有沒有在名單裡?
  • 這個人是不是成年?
  • 條件是不是同時成立,還是只要一個符合就好?

程式的力量就在這裡 —— 它不只是計算,還能幫我們「做判斷」,替我們思考。

今天我們玩的練習題,就像在幫一群人做健康檢查一樣:

程式自動判斷身高、體重是否在標準範圍,甚至還能反轉條件(用 not),就好像醫師說「雖然超過180公分,但體重沒有過輕就算合格」。

這樣的邏輯組合,在未來的專案中會非常常見完全離不開!!

掌握了這些運算子之後,你已經有能力開始「寫出會思考的程式」了。

小小學習心路歷程

回想當初自己第一次學這些比較與邏輯運算子的時候,真的是一團亂。

最常犯的錯就是把 === 搞混,原本只是想要「比較」,結果卻寫成「賦值」,程式直接報錯。
那時候心裡超崩潰!!

更崩潰的是後面還遇到 andornot、甚至 xor
但後來我慢慢發現,其實這些東西在很多情境都會用到:

  • 判斷使用者是不是同時滿足兩個條件(登入帳號 而且 輸入正確密碼)。
  • 或是給優惠活動的時候,只要滿足其中一個條件就可以套用(滿千送百 折價券)。
  • 還有 not,常常能幫忙處理「反向」的邏輯,少寫很多程式碼。

雖然一開始真的很混亂,但現在回頭看,這些比較與邏輯運算子就像是「程式的大腦」。

只要我下對指令,程式就能像小機器人一樣,幫我思考、幫我判斷。

而這種感覺,真的是從單純做數學計算,進化到能寫「有智慧的程式」的關鍵轉折。


明日預告

Day8,我們要正式進入 if 條件判斷

這會是你把「邏輯判斷」真正活用的第一步。

  • 學會 if 的基本寫法
  • 了解 if-else 的選擇邏輯
  • 玩一玩 elif 的多重判斷
  • 還會試試巢狀 if,讓條件更有層次感

更重要的是,我們會寫出第一個「能替你決定事情」的小程式,例如:

  • 自動判斷一個分數是否及格

  • 根據分數等級給出評語(A、B、C…)

  • 判斷輸入的數字是奇數還是偶數

到了明天,你就會發現:

程式已經不再只是「輸入→計算→輸出」,而是開始像個「小助理」,能根據狀況替你選擇。

那麼我們就明天見囉!如果有任何問題,歡迎在底下留言~
若覺得內容還不錯的話!也可以幫我點個like,你們的支持也是我最大的動力~


上一篇
【Day6】Python 的數字 & 文字運算大補帖
下一篇
【Day8】 程式的分岔路口—條件判斷:if / elif / else
系列文
Python 小白的逆襲:30 天從零到能教人的精華筆記,寫給迷惘的你與當年的我自己!8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言