跳到主要內容

Day 4 條件判斷

Day 4 條件判斷

引言

昨天我們學會了運算子,包括算術、比較、邏輯與賦值運算子。運算子能幫助我們比較資料、組合條件,但要讓程式「根據情況做出不同反應」,還需要把這些比較寫進決策流程中。條件判斷正是程式具備「判斷力」的關鍵,也是從被動執行走向主動反應的第一步。

這篇文章會帶你認識 Python 的條件判斷,從最基本的 if 開始,到 if...else、if...elif...else,再到巢狀條件與三元運算式。我們也會用一個「成績等第」的綜合範例,把這些語法實際應用在真實情境中,體會條件判斷如何讓程式變得更聰明。

if 語句:最基本的條件

在 Python 中,if 是最簡單的條件判斷。它會評估後面的運算式,若結果為 True,就執行縮排內的程式碼;若為 False,則直接跳過。

age = 20
if age >= 18:
    print("你已經成年了")
print("程式結束")

執行程式會輸出「你已經成年了」與「程式結束」。注意 if 結尾有一個冒號 :,這是 Python 用來標示「接下來是縮排區塊」的語法;縮排的範圍就是條件成立時要執行的部分。Python 慣例使用 4 個半形空格作為縮排。

if...else:二選一

當條件只有兩種結果時,可以用 if...else。if 處理條件為 True 的情況,else 則負責處理剩下的所有情況,也就是條件為 False 的部分。

score = 55
if score >= 60:
    print("及格")
else:
    print("不及格")

因為 score 是 55,小於 60,所以會執行 else 區塊,輸出「不及格」。這樣的結構讓程式可以在兩個分支中選擇一個執行,永遠只會走其中一條路。

if...elif...else:多選一

現實中的判斷往往不只有兩種結果,例如成績的等第、天氣的分類等。這時候就可以用 elif(也就是 else if 的縮寫)來串接多個條件。Python 會由上到下依序檢查,只要某一個條件成立,就只執行該區塊並跳過後續判斷。

score = 85
if score >= 90:
    print("A 等")
elif score >= 80:
    print("B 等")
elif score >= 70:
    print("C 等")
elif score >= 60:
    print("D 等")
else:
    print("F 等")

執行程式會輸出「B 等」,因為 score 是 85,符合 score >= 80 這個條件。一旦命中,下方的 elif 與 else 都不會再被檢查,這種「短路」特性可以讓程式更有效率。

巢狀條件判斷

有時候一個條件成立後,內部還需要再做一次判斷,這時候就可以把 if 放在另一個 if 裡,形成巢狀結構。巢狀條件可以處理更複雜的邏輯,但也會讓縮排層數變深,因此要適度使用,避免可讀性下降。

age = 20
has_ticket = True

if age >= 18:
    if has_ticket:
        print("可以入場")
    else:
        print("已成年但沒帶票")
else:
    print("未成年,禁止入場")

當外層的 if 成立時,才會進入內層的判斷;若外層條件不成立,內層的程式碼根本不會被看到。這個例子展示了巢狀條件的典型應用:先檢查大條件,再針對通過的子集合做更細的分類。

不過要特別注意的是,當巢狀層數超過三層時,可讀性通常會快速下降。如果遇到這種情況,可以考慮把內層的條件抽成一個獨立的判斷,或使用邏輯運算子把條件合併。例如上面的入場判斷,也可以改寫成「扁平」版本:

if age >= 18 and has_ticket:
    print("可以入場")
elif age >= 18:
    print("已成年但沒帶票")
else:
    print("未成年,禁止入場")

兩種寫法執行結果相同,但後者少了一層縮排,讀起來更舒服。實務上,盡量讓條件判斷保持「扁平」,是寫出易讀程式碼的好習慣。

三元運算式

當條件判斷的結果只是為了決定某個變數或某段運算式的值時,可以使用三元運算式(ternary expression),把 if...else 寫成一行,讓程式碼更精簡。它的語法是「值 if 條件 else 其他值」,讀起來就像在說:「如果是這樣就用這個值,否則用另一個。」

age = 16
status = "成年" if age >= 18 else "未成年"
print(status)  # 輸出 未成年

# 也可以直接用在 print 裡
score = 75
print("及格" if score >= 60 else "不及格")  # 輸出 及格

三元運算式適合用在簡單的二選一情境,例如根據條件決定顯示的文字、計算折扣、或設定預設值。當邏輯變得複雜時(例如有巢狀判斷或多個條件),仍建議改用完整的 if...else 結構,避免把一行擠得太長。

綜合練習:成績等第小程式

把今天學到的語法整合起來,我們寫一個完整的成績等第判斷程式。這個範例會同時用到 if、elif、else,以及 input() 函式讓使用者輸入分數,是一個很典型的條件判斷應用。

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

if score < 0 or score > 100:
    print("分數超出範圍")
elif score >= 90:
    print("A 等:表現優異")
elif score >= 80:
    print("B 等:表現良好")
elif score >= 70:
    print("C 等:表現中等")
elif score >= 60:
    print("D 等:剛好及格")
else:
    print("F 等:需要再加強")

執行後,輸入 85 會得到「B 等:表現良好」;輸入 110 則會得到「分數超出範圍」。這個小程式雖然簡短,但已經具備了真實世界常用的「輸入、判斷、輸出」流程。實際應用時,你還可以把它包進迴圈或函式,讓程式能反覆詢問或重複使用,這也是後續章節會介紹的內容。

常見錯誤與除錯建議

寫條件判斷時,有幾個常見的錯誤值得特別留意。熟悉這些坑點,能幫助你在除錯時更快找到問題所在。

忘記冒號或縮排錯誤:if、elif、else 結尾一定要加冒號 :,並且內部的程式碼必須縮排一致。混用 Tab 與空格是新手最常踩的雷,Python 官方建議一律使用 4 個半形空格。

把 = 寫成 ==:在條件裡,= 是賦值運算子,== 才是比較運算子。寫成 if score = 60: 會直接報錯;如果不小心在兩個等號之間多打或少打,都會讓邏輯完全錯誤。

條件順序錯誤:在 if...elif...else 中,順序非常重要,因為一旦命中就不會往下看。舉例來說,如果把 score >= 60 寫在 score >= 90 前面,所有 90 分以上的人都只會被判為「及格」。

# 錯誤示範:順序顛倒導致判斷失準
score = 95
if score >= 60:
    print("及格")     # 永遠先命中這裡
elif score >= 90:
    print("A 等")     # 永遠不會執行

布林值與整數混用:Python 中 0、空字串 ""、空串列 [] 會被視為 False,其他非空值則視為 True。這個特性在判斷容器是否為空時很方便,但若沒有意識到,可能會寫出難以理解的程式碼。

items = []
if items:
    print("有資料")
else:
    print("沒有資料")  # 因為空串列是 False,會執行這裡

寫條件判斷時,多花幾秒思考「邊界情況」是否符合預期,是避免 bug 的好方法。

條件判斷與現實世界的對應

條件判斷之所以重要,是因為它讓程式能模擬真實世界的決策邏輯。從自動判斷使用者是否符合資格、決定是否發送通知,到串流平台依觀看紀錄推薦內容,本質上都是一連串條件判斷的組合。理解這個觀念後,未來學習更複雜的決策樹或機器學習分類器時,會發現它們其實都是條件判斷的延伸。

結語

今天我們學會了 Python 的條件判斷語法:最基本的 if、二選一的 if...else、多選一的 if...elif...else、處理複雜邏輯的巢狀條件,以及把簡單判斷寫成一行的三元運算式。透過「成績等第」的綜合練習,你也看到了條件判斷如何應用在真實的小程式中。

明天,我們會進入迴圈的世界。當程式需要重複執行某段程式碼時,for 與 while 將會是非常強大的工具,也是把條件判斷的力量延伸到大量資料上的關鍵。

留言

這個網誌中的熱門文章

Day 2 變數與資料型別

Day 2 變數與資料型別 引言 寫程式的過程中,變數與資料型別是處理資料的基礎。變數是存放資料的容器,資料型別則決定這筆資料有哪些特性、可以進行哪些操作。學會定義變數、認識各種資料型別,是學好 Python 的關鍵一步。 這篇文章會帶你了解 Python 中變數的觀念、如何定義變數,以及常見的資料型別,包括整數、浮點數、字串、布林值,還有串列、元組、字典與集合等容器型別。我們也會介紹變數的命名規則與撰寫風格建議,以及如何用 type() 檢查資料型別。 什麼是變數?如何在 Python 中定義變數 變數是在程式執行時用來存放資料的名稱。透過定義變數,我們可以給一筆資料一個名字,並在程式的其他地方用這個名字取用該筆資料。在 Python 中,變數不需要事先宣告型別,因為 Python 是動態型別語言,變數的型別由指定給它的值決定。 定義變數的基本語法 在 Python 中定義變數非常簡單,只要用賦值符號 = 把值指定給變數即可。例如: x = 5 # 定義變數 x,並把整數 5 賦值給它 name = "Alice" # 定義變數 name,並把字串 "Alice" 賦值給它 在這裡,x 是一個變數,被賦予整數 5;name 是另一個變數,被賦予字串 "Alice"。 變數的更新與覆寫 變數的值可以修改,也就是說,我們可以在程式的不同地方給同一個變數新的值。例如: x = 10 # x 最初被賦予 10 x = 15 # x 的值現在被更新為 15 這樣就能依照需求,在程式執行過程中靈活調整變數的值。 Python 的動態型別系統 Python 和某些靜態型別語言不同,定義變數時不需要宣告型別。賦值時,Python 會根據值自動判斷變數的型別。例如: x = 5 # x 是整數 x = 3.14 # x 變成浮點數 x = "Hi" # x 變成字串 同一個變數在程式執行過程中可以存放不同型別的值,這是 Python 的彈性之一。 常見資料型別 在 Python 中,資料型別決定我們可以對變數進行哪些操作...

Day 1 Python 簡介與環境設定

Day 1 Python 簡介與環境設定 引言 在現在的科技環境裡,程式設計已經是一項重要技能。無論你是對資料科學有興趣、想成為開發者,或是想踏入人工智慧(AI)領域,學會寫程式都能明顯提升你的競爭力。在眾多程式語言中,Python 因為語法簡單、功能強大、應用範圍廣泛,成為許多人進入程式世界的第一選擇。這篇文章會帶你認識 Python 的背景與優勢,並一步步教你在不同系統上安裝與設定 Python 開發環境,最後寫出第一支 Python 程式。 為什麼選擇 Python? Python 是一種高階程式語言,由 Guido van Rossum 在 1991 年發布。Python 的設計哲學強調程式碼的可讀性,並用縮排來定義程式區塊,這點和許多使用大括號的語言不同。簡潔的語法讓它成為初學者的理想選擇;就算是經驗豐富的開發者,也能用它完成複雜的專案。 Python 的優勢如下: 簡單易學 :Python 的語法清楚、結構簡潔,初學者很快就能上手。和其他語言相比,學習曲線相對平緩,不需要先弄懂一堆複雜觀念,就能開始寫程式。 應用範圍廣泛 :從資料科學、網頁開發、人工智慧、機器學習、自動化測試到網路爬蟲,Python 都有大量開源函式庫與工具支援,而且在這些領域都扮演關鍵角色。 豐富的函式庫與框架 :Python 的函式庫生態系非常龐大。做資料分析有 NumPy、Pandas;開發網站有 Django、Flask;做深度學習有 TensorFlow、PyTorch。各種需求幾乎都能找到對應的套件,讓開發更有效率。 跨平台支援 :Python 支援 Windows、macOS、Linux 等作業系統,程式通常不需要太多修改就能跨平台執行,讓開發與部署更有彈性。 活躍的社群 :Python 擁有龐大的開發者社群。學習或開發上遇到問題,幾乎都能在社群與論壇(例如 Stack Overflow)找到答案,對初學者來說是很強的後盾,也能減少卡關時的挫折感。 Python 的應用領域 Python 的流行與強大功能,讓許多領域都開始大量使用它。以下是幾個常見的應用方向: 資料科學 :隨著大數據與人工智慧興起,資料科學大量使用 Python。NumPy、Pandas 與 Matplotlib 等工具能處理和分析龐...

Python 從入門到 PyTorch 深度學習:開啟 AI 世界的大門

Python 從入門到 PyTorch 深度學習:開啟 AI 世界的大門 隨著人工智慧(AI)與深度學習(Deep Learning)快速發展,越來越多人對這些技術產生興趣。不論你是想踏入 AI 領域的初學者,還是已經有程式基礎的開發者,學好 Python 與深度學習框架(例如 PyTorch),都能為你打開更多可能。 為什麼選擇 Python? Python 已經是資料科學與人工智慧領域的首選語言。它的語法簡潔、容易上手,而且擁有龐大的生態系與大量開源函式庫。無論是資料處理、資料視覺化,還是建立機器學習與深度學習模型,Python 都能勝任。對想進入 AI 或資料科學領域的人來說,它幾乎是必備工具。 PyTorch 是什麼? PyTorch 是由 Meta(原 Facebook)AI 研究團隊開發的開源深度學習框架,以易用、靈活和動態計算圖著稱,是許多 AI 研究人員與開發者的首選。相較於其他框架,PyTorch 的寫法更貼近原生 Python,對初學者相對友善。無論是簡單的實驗,還是複雜的深度學習模型,PyTorch 都能提供強大的支援。 這個系列能帶給你什麼? 這個系列會從 Python 的基礎開始,帶你一步一步學習,最後能自己用 PyTorch 建立深度學習模型。即使你完全沒有寫過程式,也能跟著文章的節奏累積技能,理解 AI 與深度學習的核心觀念。 本系列涵蓋的主題 Python 基礎:從變數、條件判斷到函式與模組。 資料處理工具:用 NumPy 與 Pandas 有效率地操作資料。 資料視覺化:用 Matplotlib 與 Seaborn 把資料畫成圖表。 深度學習的數學基礎:線性代數、微積分與機率。 PyTorch 入門:理解張量、模型建構與 GPU 加速。 基礎深度學習模型:CNN 與 RNN 的實作應用。 深度學習專案實戰:從資料前處理到模型部署的端到端流程。 誰適合這個系列? 程式初學者 :如果你對 AI 充滿好奇,卻還沒寫過程式,系列的第一部分會帶你快速上手 Python,並幫助你理解深度學習的基本觀念。 資料科學愛好者 :如果你已經熟悉一些資料處理方法,進階部分會教你如何用 PyTorch 建構深度學習模型。 開發者與研究人員 :想更深入了...