iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0

前言

寫程式就像走人生的道路:有時候直走,有時候左轉,有時候得先停下來思考。

到目前為止,我們的 Python 程式都很「聽話」,從上到下依序執行。
但真實世界可沒這麼單純啊!

想像一下:

  • 考試分數 ≥ 60 就及格,否則就不及格。
  • 如果天氣下雨,就帶雨傘;如果天氣晴朗,就戴墨鏡。
  • ATM 取款時,如果餘額足夠,就允許領錢,否則要拒絕。

這些「根據條件做選擇」的情境,正是 if 條件判斷 的舞台。
今天,我們要讓程式學會「思考」,不再只是機械執行。

一、if 的基本語法(單一條件式)

Python 的 if 條件判斷語法非常直白,像這樣:

if 條件式:
    # 縮排的程式碼會在條件為 True 時執行

⚠️ 縮排在 Python 中是十分重要的,而根據 Python的協定 PEP8 的規定,
在 Python 中我們會使用「四個空格」來縮排,少一個空格都會報錯!!這部分需要非常留意喔!

範例

score = 75

if score >= 60:
    print("恭喜,你及格了!")#若score>=60,才會執行這行程式碼

這邊多新增一行沒有縮排的程式碼:(代表無論條件式是否成立,都會執行)

score = 65

if score >= 60:
    print("恭喜,你及格了!")#若score>=60,才會執行這行程式碼
print("執行結束!")

https://ithelp.ithome.com.tw/upload/images/20250922/201647210Rj5WDzJUD.png

這邊我也製作了有關單一分支的流程圖,對於初學者應該會比較好理解!
https://ithelp.ithome.com.tw/upload/images/20250922/20164721FQdbizDT5U.png

這邊也可以試試看自己輸入成績給程式去判斷:

score = float(input("請輸入成績:"))
if score>=60:
    print("考試及格")
print("執行結束")

範例:發燒判斷(溫度達到37.5,就判斷成發燒)

# 練習題 1:發燒判斷
temp = float(input("請輸入體溫:"))

if temp >= 37.5:
    print("發燒了!請注意休息。")

二、if-else:二選一

人生不是只有「要嘛做,要嘛不做」這麼簡單。
很多時候,我們需要「兩個分支」。

if 負責「條件成立」的情況,else 則負責「條件不成立」的時候。
有了 else,就不用擔心「條件沒命中時,程式什麼都不做」。

這時候 if-else 就派上用場:

基本語法:

if 條件式:
    # 語句...
# 上述條件不成立執行
else:
    # 語句...

範例

score = 55

if score >= 60:
    print("恭喜,你及格了!")
else:
    print("抱歉,你不及格,再接再厲!")

print("執行結束")

執行後的輸出:

抱歉,你不及格,再接再厲!

這邊一樣有做一張流程表,希望讓初學者可以更容易的了解~
https://ithelp.ithome.com.tw/upload/images/20250922/201647212MHs4EE0C7.png

接下來,我們一起來看看不同類型的練習題!

(1)發燒判斷

temp = float(input("請輸入你的體溫(°C):"))

if temp >= 37.5:
    print("⚠️ 你可能發燒了,建議就醫!")
else:
    print("✅ 體溫正常~")

(2)服藥提醒

take_med = input("你吃過藥了嗎?(請輸入 yes 或 no):")

if take_med == "yes":#這邊要注意,只有輸入小寫的yes,程式才會判斷條件成立!
    print("✅ 很棒,記得準時吃藥!")
else:
    print("⚠️ 別忘了吃藥喔!")

(3)過敏食材判斷(結合list)

allergy_list = ["花生", "牛奶", "蝦", "蛋"]

food = input("請輸入一項食材名稱:")

if food in allergy_list:
    print("⚠️ 小心!您可能對此過敏")
else:
    print("✅ 這項食材目前沒列在過敏名單中。")

(4)保健品花費計算

a = int(input("第一項保健品價格:"))
b = int(input("第二項保健品價格:"))
c = int(input("第三項保健品價格:"))

total = a + b + c

if total > 100:
    print("💰 注意保健預算,今天總共花了", total, "元")
else:
    print("✅ 花費合理,今天總共花了", total, "元")

(5)判斷奇數或偶數

num = int(input("請輸入一個整數:"))

if num % 2 == 0:
    print("這是偶數!")
else:
    print("這是奇數!")

三、多重條件:elif

基本結構:

if condition1:
    statement1 for True Condition1
elif condition2 :
    statement2 for True Condition2
elif condition3 :
    statement3 for True Condition3
else:
    statements for Each Condition False

當情況不只兩種的時候,這種結構可以處理「多選一」的情境:

score = 92

if score >= 90:
    print("優等")
elif score >= 80:
    print("甲等")
elif score >= 70:
    print("乙等")
elif score >= 60:
    print("丙等")
else:
    print("丁等,不及格")

小提醒:

  1. Python 會 由上到下 逐一檢查條件。
  2. 一旦找到 第一個成立的條件,就執行那個區塊,並跳過後面所有判斷。
    • 例如 score = 92,第一個條件 score >= 90 成立。所以會輸出「優等」,不會再去檢查 80、70、60 的條件。
  3. 如果所有條件都不成立,才會執行 else 區塊。

這邊來補充我當初是初學者時,比較常忽略的細節!

  • ifelse 各只能出現一次
    • if 一定要在最上面,負責第一個條件檢查。
    • else 一定要在最後面,負責「所有條件都不符合」的情況。(不需要再寫條件式了!!)
    • 如果你在程式裡寫了兩個 else,會直接報錯。
  • elif 可以有很多個(也可以沒有)
    • 當有多種可能性需要判斷時,就一直加 elif
    • 如果情況只有兩種(例如及格/不及格),那就直接用 if...else
  • 順序非常重要!
    • Python 只會執行第一個符合條件的區塊。
    • 例如下面這段程式碼會出錯:
score = 95

if score >= 60:
    print("及格")
elif score >= 90:
    print("優等")

結果會輸出「及格」,因為 95 ≥ 60 已經符合第一個條件,Python 就不會再檢查後面的 elif

條件要「由大到小」或「由嚴到寬」來排序。

  1. 注意縮排!
    • 每個分支的程式碼區塊都要有相同縮排,否則會報錯。
    • 初學者常常 ifelifelse 對齊錯誤,導致程式無法執行。

#範例:樂園門票計算機

age = int(input("請輸入年齡:"))

if age < 6:
    print("票價:免費 (學齡前兒童)")
elif age < 12:
    print("票價:150 元 (兒童票)")
elif age < 65:
    print("票價:300 元 (成人票)")
else:
    print("票價:200 元 (敬老票)")

#範例:販賣機選單

print("請選擇飲料:")
print("1. 可樂")
print("2. 綠茶")
print("3. 咖啡")
print("4. 柳橙汁")

choice = int(input("輸入選項編號 (1-4):"))

if choice == 1:
    print("你選擇了 可樂")
elif choice == 2:
    print("你選擇了 綠茶")
elif choice == 3:
    print("你選擇了 咖啡")
elif choice == 4:
    print("你選擇了 柳橙汁")
else:
    print("輸入錯誤,請輸入 1-4 之間的數字")

進階挑戰題:BMI健康判斷

# 提示使用者輸入身高與體重
height = float(input("請輸入身高 (公分):"))
weight = float(input("請輸入體重 (公斤):"))

# 單位轉換:公分 -> 公尺
height = height / 100

# 計算 BMI
bmi = weight / (height ** 2)

print("你的 BMI 為:", round(bmi, 2))  # 四捨五入到小數點後兩位

# 判斷 BMI 狀態
if bmi < 18.5:
    print("體重過輕,多吃一點")
elif bmi < 24:
    print("正常範圍,保持運動 ")
elif bmi < 27:
    print("過重,注意飲食")
elif bmi < 30:
    print("輕度肥胖,要開始規劃運動")
elif bmi < 35:
    print("中度肥胖,建議改善生活習慣")
else:
    print("重度肥胖,請務必注意健康")

四、巢狀 if (Nested if)

「巢狀 if」指的是在一個 ifelse 區塊裡,再寫另一個 if 判斷。

也就是說,條件判斷可以層層嵌套,只有在前一層條件成立後,才會檢查下一層的條件。

這種結構很常見於 多階段決策,例如:

  • 學生成績 → 先判斷是否及格,再依照分數區間給不同評語。
  • 體檢數據 → 先判斷是否正常,再細分「偏高」、「偏低」。
  • 系統權限 → 先判斷是否登入,再判斷使用者角色是「管理員」還是「一般會員」。

巢狀 if 的基本架構

if 條件A:
    # 條件A成立,才會檢查條件B
    if 條件B:
        執行程式1
    else:
        執行程式2
else:
    執行程式3

‼️常見錯誤與提醒

縮排錯誤

Python 是靠縮排決定程式區塊的。如果巢狀 if 的縮排錯誤,可能導致程式無法執行或邏輯跑掉。

過度巢狀

如果判斷條件太多層(超過 3 層),程式會變得難以閱讀與維護。
此時建議使用 邏輯運算子 (and/or) 或後面會學到的 函式 來優化。

if 與 else 的數量限制

  • if 可以有 1 個(必須在最前面)。
  • elif 可以有 0 個、1 個或多個。
  • else 最多只能有 1 個,並且必須放在最後。

這些規則在巢狀結構中同樣適用。

score = int(input("請輸入分數:"))

if score >= 60:  
    print("及格 ✅")
    
    if score >= 90:  
        print("表現優異,屬於 A 級")
    elif score >= 80:
        print("不錯,屬於 B 級")
    else:
        print("剛好過關,屬於 C 級")
else:
    print("不及格 ❌,請加油")
  • 第一層先檢查「是否及格」。
  • 若及格,再依照分數細分 A/B/C 級。
  • 若不及格,直接結束判斷。

新手建議補充

  1. 不要一開始就把判斷式寫得太複雜
    • 建議先用簡單的 if-else 測試,再慢慢優化。
    • 新手常犯的錯誤是直接把 andor、巢狀 if 全部寫在一起,結果 debug 到懷疑人生。
  2. 適度印出 debug 訊息
    • 在判斷過程中,可以用 print() 看變數值,確認程式邏輯正不正確。
  3. 學會拆解問題
    • 如果條件太多,可以先用註解(#)寫下邏輯,再一條一條轉換成程式碼。

4.結構要寫清楚、整齊

  • 例如縮排、或是再寫多層if的時候,要記得寫整齊一點,不然會很眼花撩亂。

結語

今天我們正式走完 Python 判斷式的黃金三兄弟:

  • if:專門處理條件成立時的行為
  • elif:處理「多種可能性」,可以有零個或多個,但不能獨立存在
  • else:保底兜底,最多只能有一個,出現在最後

同時,我們也進一步理解了 巢狀結構(nested if) —— 當一個條件裡還有更細的條件要檢查,就能用巢狀方式處理。這在處理「層層篩選」或「多重規則」時非常實用,比如:成績分級、帳號登入驗證、甚至 BMI 健康分類。

初學者最容易忽略的細節也提醒過大家了:

  • ifelse 各只能用一次,但 elif 想加幾個就加幾個。
  • 縮排很重要,巢狀結構時一定要對齊,否則你會收到滿滿的 IndentationError
  • 條件判斷是從上往下執行,一旦符合就不會繼續往下跑。

所以今天的重點,不只是「會寫 if-else」,更是學會「如何設計條件邏輯」。
其實我在學習這部分的時候,會覺得設計條件邏輯才是最燒腦的,因為有的時候看似寫的很完整,
但是後來會發現有一些條件是沒有想到的漏網之魚。所以要完整的規劃出條件邏輯,非常需要細心!

明日預告

明天,我們將迎來 Python 資料結構的第一個大角色 —— 串列(List)
這是 Python 世界裡的「百寶袋」,可以一次裝很多東西,隨時取用、修改、甚至排序。

明天你會學到:

  • 如何建立一個串列(空的、帶初始值的)
  • 如何透過索引(index)存取元素
  • 串列的更新、刪除與新增方法
  • 常見的內建函式與操作(len()append()remove()…等等)
  • 實戰演練

如果說今天的條件判斷是「決策大腦」,
那麼明天的 List 就是「資料倉庫」。

當兩者結合起來,程式就會越來越有模樣!

哎呀~時間過很快,一下就來到Day8了!
其實每天趕稿寫文章,越寫真的越佩服IThome大神們,
因為要能完整的把篇幅架構打得清楚,真的會很燒腦~
再加上每天期限截止前,都會開始覺得是不是哪裡還可以再多補充一點,這樣的編排會不會太零散等等
(完美主義作祟哈哈哈)

不過,我也從中獲得很多成就感!即使不確定我打的文會不會飄出去!
但我相信有一天一定能幫助到需要幫助的讀者們!!!
因為我也曾經受到這版上太多大神的幫助,而我認為這就是一種「善的循環」~
我也很確定 一個月後完賽的我會很為現在的自己感到驕傲!!

⭐️這邊來回顧一下Day1-Day7的內容⭐️

【Day1】參賽宣言文(序)
【Day2】 這條蛇不會咬人:Python 的前世今生 + 安裝教學
【Day3】你的養蛇場準備好了嗎?:Python 環境安裝:Anaconda、Jupyter Notebook

【Day4】我的程式櫃子,放什麼都行──變數與資料型別
【Day5】程式會跟你對話啦:輸入 input() 與資料型別轉換
【Day6】Python 的數字 & 文字運算大補帖
【Day7】真假大對決!程式怎麼判斷世界?:關係運算子 & 邏輯運算


上一篇
【Day7】真假大對決!程式怎麼判斷世界?:關係運算子 & 邏輯運算
系列文
Python 小白的逆襲:30 天從零到能教人的精華筆記,寫給迷惘的你與當年的我自己!8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言