選擇結構
由上而下一行接一行逐行執行,即使再執行一次其流程仍不會改變,此種程式架構稱為「循序結構」。
較複雜的程式會應程式的需求,依照條件式的不同而進行不同的執行流程,而得到不同的結果,這種架構就是「選擇結構」。
Python提供的 if 選擇結構敘述如下:
- 單向選擇:
if … - 雙向選擇:
if … else … - 巢狀選擇:
if … else … - 多向選擇:
if … elif … else
選擇結構中會有條件式,依照條件式的不同會執行不同的程式流程。條件式可以使用前面介紹的關係和邏輯運算式來編寫。
1. 單向選擇 if…
所謂 「單向選擇」是指當 if 的條件式成立為 True 時,會執行 if 條件式「:」冒號後面縮排的敘述區段;若if的條件式不成立為 False 時,則跳過 if 單向選擇結構,執行縮排敘述區段後的敘述。語法及流程圖如下:

[例] 求num的絕對值
程式碼
if (num < 0) : # 省略左右括號()亦可寫為 if num < 0 : num = -num
[例] 成績在55分以上未達60分者,以60分計分。
程式碼
if ((score >= 55) and (score < 60)) : score = 60 print('差強人意,通融過關')
Python3.8中新增「:=」指定表式(Assignment Expressions或稱指派表示式),因為符號很像海象臉部的眼睛和長牙,因此被暱稱為海象運算子。指定表式可縮短程式碼加快執行速度,但會降低可讀性,可自行視需求使用。例如:
程式碼
score = 65 if (score >= 60): print('及格')使用海象運算子時,可以改寫為:
if ((score := 65) >= 60): print('及格')
2. 雙向選擇 if…else…
「雙向選擇」是指當條件式成立時,執行 if 條件式「:」冒號後面的敘述區段1;若條件式不成立時,則執行 else 「:」冒號後的敘述區段2。
語法及流程圖如下:

[例] 門票300元,若年齡低於10歲或65歲以上半價。
程式碼
if (age < 10 or age >= 65) : price = 150 else : price = 300
[例] 根據成績及格或不及格,給予不同回饋。
程式碼
if (score > 60): print('及格') print('恭喜過關!') else : print('不及格') print('明年再會!')
[簡例] 輸入密碼,若密碼正確,顯示「密碼正確,歡迎光臨」;若密碼不正確,顯示「密碼錯誤,拒絕進入」。 (檔名: password.py)
程式碼:
password.pypw = input('請輸入密碼:') if (pw=="gotop168") : print('密碼正確,歡迎光臨') else : print('密碼錯誤,拒絕進入')
3. 巢狀選擇 if…else…
所謂 「巢狀選擇」是指 if 或 else 的敘述區段裡面,還有選擇結構,巢狀選擇結構就是將雙向選擇延伸成多向選擇。語法及流程圖如下:

[簡例] 給予三個整數,使用巢狀選擇結構來找出三個整數中的最大數。 (檔名:max.py)
程式碼:
max.pyn1=34 n2=100 n3=-67 print(f'三個整數分別為 {n1}, {n2}, {n3}') if (n1>n2) : # 判斷 n1 是否大於 n2 if(n1>n3) : # 判斷 n1 是否大於 n3 max=n1 else : max=n3 else : if(n2>n3) : # 判斷 n2 是否大於 n3 max=n2 else : max=n3 print () print(f'比較結果: 最大數為 {max}')
4. 多向選擇 if…elif…else
當選擇的項目超過兩個,也可以使用「多向選擇」結構來處理。除第一個條件使用 if 判斷外,其他都使用elif,最後以 else 處理剩下的可能性。

[簡例] (檔名:movie.py)
根據最低年齡制定電影分級,電影分級的規則如下:
- 普遍級:0歲以上皆可欣賞。
- 保護級:6歲(含)以上皆可欣賞。
- 輔導級:12歲(含)以上皆可欣賞。
- 限制級:18歲(含)以上皆可欣賞。
- 預設為普遍級。
程式碼:
movie.pyage=int(input('請輸入年齡(正整數):')) rating = "普遍級" if age >= 18: rating = "限制級" elif age >= 12: rating = "輔導級" elif age >= 6: rating = "保護級" else: rating = "普遍級" print(f'年齡{age}歲最高可看{rating}電影')
相關主題與延伸閱讀
- 2. 關係運算式:
if條件式常用關係運算式來判斷。 - 3. 邏輯運算式:
if條件式也常用邏輯運算子組合多個條件。 - 1. 結構化程式設計:選擇結構是結構化程式設計三大流程架構之一,是先備知識。
- 1. for 迴圈:選擇結構常與重複結構搭配使用,是後續章節的銜接。
- 3. continue 與 break:
continue、break也常搭配if條件式判斷是否要中斷或跳過迴圈。