程式可以如此靈活的原因之一,就是能依據不同的條件,來進行不同的工作。要進行判斷,可以使用 if...else 的語法,如下:
if 條件運算式: 程式敘述一 # 當然也可以是很多筆敘述 else: 程式敘述二當條件成立時,將執行敘述一,否則會執行敘述二。如果不需要敘述二,則可省略 else 以下的部分。此外,在一行的開頭加入空白使程式往右靠,這種排版方式稱為縮排,縮排在 Python 當中是必須的。Python 的習慣上是使用四個空白作為縮排,本範例亦如此使用(但因編輯器的緣故,如果你看的是網頁原始碼,則是使用 Tab 縮排),Python 內建的 IDLE 環境也會使用空白縮排。如果沒有團隊合作,或者程式碼必須讓別人閱讀等特殊必要,你也可以依照喜好選擇空白的數量或者改用 Tab 來進行縮排,但請留意,這些方式應避免混用,否則可能導致程式無法執行或難以除錯(若有興趣知道混用的後果,請自行嘗試或上網查詢)。
以成績及格與否的判斷做為一個簡單的範例,其邏輯上為「60 分以上及格,否則被當」。寫成程式碼時的範例如下:
grade = 87 # 你可以改成其他數字,來觀察效果 if grade >= 60: print('Pass') else: print('GG')又例如,常用的判斷是否可以形成三角形的規則「兩個短邊相加是否大於第三邊」,可以撰寫如下:
a = 50 b = 60 c = 108 if a + b > c: print("This is a triangle.") else: print("This is NOT a triangle.")上面兩個範例中的「>=」和「>」,稱之為條件運算子,可以用來判斷左邊的運算結果,是否大於等於右邊的運算結果。其餘的條件運算子有:
- 大於:「>」,等於:「==」,小於:「<」。需注意判斷是否等於的用法是兩個等號(一個等號是變數指派)
- 大於等於:「>=」,小於等於:「<=」
- 不等於:「!=」
- 且:「and」
- 範例:「a == b and 5 == c」
- 發現第一個條件不成立時,則不判斷第二個條件
- 或:「or」
- 範例:「x != y or z == 3」
- 發現第一個條件成立時,則不判斷第二個條件
上述運算子的簡單使用範例如下:
b = 7 if b % 2 != 0: print("b is odd") a = 2 b = 3 if a > 0 and b > 0: print("a and b are both positive") a = 20 b = 90 if a > 60 or b > 70: print("a or b passed")或和且的混用範例如下:
a = 10 b = 20 c = 30 ''' 下列條件符合其一時執行 1. a 比 5 大,而且 b 比 10 大 2. c 比 15 大 ''' if a > 5 and b > 10 or c > 15: print("Test 1: OK") a = 15 b = 20 c = 3 ''' 下列條件都要符合時執行 1. a 比 5 大,或者 b 比 10 大 2. c 比 15 大 ''' if (a > 5 or b > 10) and c > 15: print("Test 2: match") else: print("Test 2: GG")「或」就像加法,「且」就像乘法,它們也遵守先乘除後加減的規則。我們把前面範例最後一段的括號拿掉看看,就會產生跟前面範例不同的結果:
a = 15 b = 20 c = 3 ''' 下列條件都要符合時執行 1. a 比 5 大,或者 b 比 10 大 2. c 比 15 大 ''' if a > 5 or b > 10 and c > 15: print("Test 2: match") else: print("Test 2: GG")在數學式子中,我們會寫"a > b > c",這是大家很熟悉的遞移律。在其他某些語言當中,直接寫"a > b > c"作為判斷式是會有問題的,但是在 Python 當中,可以直接使用遞移律來撰寫判斷式:
a = 3 b = 2 c = 1 if a > b > c: print("Match\n") else: print("Ha ha ha UCCU\n")如果要進行的條件判斷或動作比較簡單,可以用以下的方法縮成一行:
# 例如第一個範例,可以簡化成這樣 grade = 70 print('Pass') if grade >= 60 else print('GG') # 語法簡化的條件判斷,也可以用於指派運算式 a = 1 b = 2 c = (a + b) if a > b else (a - b)Question: 如何把前述範例的最後一行,還原成多行的形式?
如果要進行多的關卡的條件判斷,可以使用「elif」,範例如下:
grade = 65 if grade >= 90: print('A+') elif grade >= 80: print('A- or A') elif grade >= 70: print('B-, B or B+') elif grade >= 60: print('C-, C or C+') else: print('GG')Question: 在前述範例中,如果把幾個 elif 區塊的順序調換,會發生什麼事?為什麼?
進行程式設計時,可以依照自己的流程需求,使用合適的條件判斷方式,例如閏年的判斷, 其規則為逢 4 的倍數閏、100 的倍數不閏、400 的倍數閏,程式碼可以寫成以下的樣子:
year = 2018 if year % 400 == 0: print("Leap") elif year % 100 == 0: print("Common") elif year % 4 == 0: print("Leap") else: print("Common")條件判斷也可以一層包一層,稱為巢狀。例如要把第一個範例中,80 分以上的加一個特別鼓勵時,方法如下:
grade = 65 if grade >= 60: print('Pass') if grade >= 80: print('Good') else: print('GG')在前面的一些範例中,你可能會發現數字會少掉或者多出一個很小的數字。這是由於浮點數在電腦中的精確度限制所造成,只要程式當中需要進行浮點數的運算,就很可能會碰到類似問題,例如加法不一定遵守結合律(associative):
print(0.1 + 0.2 + 0.3) print((0.1 + 0.2) + 0.3) print(0.1 + (0.2 + 0.3)) print((0.1 + 0.2) + 0.3 == 0.1 + (0.2 + 0.3))