跳到內容

選擇敘述

到目前為止,程式都是從上到下一行一行執行。這一章要讓程式學會看情況做不同的事:條件成立就做這個,不然就做那個。

if 後面接一個條件,條件成立時才執行底下縮排的那幾行。這裡的縮排很重要:Python 靠縮排來分辨哪些程式碼是 if 底下的。

score = int(input("你的分數:"))
if score >= 60:
print("恭喜及格!")

輸入 85,條件 score >= 60 成立,就印出那行。把分數改成 40 再送出一次,條件不成立,if 底下那行就整個被跳過。

加上 else,就能在條件不成立時走另一條路。兩段一定只會執行其中一段:

score = int(input("你的分數:"))
if score >= 60:
print("及格")
else:
print("不及格")

要分三種以上的情況,就用 elif(else if 的縮寫)。Python 由上往下逐一檢查,遇到第一個成立的條件就執行那段,剩下的全部跳過:

score = int(input("你的分數:"))
if score >= 90:
print("優等")
elif score >= 60:
print("及格")
else:
print("不及格")

因為是由上往下檢查,條件的順序有影響。這裡先問 >= 90,再問 >= 60;如果把兩個對調,90 分的人也會先撞到 >= 60 而被判成「及格」。

if 的條件通常是一個比較。常用的比較運算子有六個:

運算子意思
==等於
!=不等於
>大於
<小於
>=大於等於
<=小於等於

要特別小心:判斷「相等」用的是兩個等號 ==,一個等號 = 是把值指定給變數,兩者意思完全不同。比較出來的結果是布林值 TrueFalse

要判斷一個數字落在某個範圍內,Python 可以像數學一樣把比較連起來寫。90 <= score <= 100 的意思就是「score 同時大於等於 90、又小於等於 100」:

score = int(input("你的分數:"))
if 90 <= score <= 100:
print("優等")
elif 60 <= score < 90:
print("及格")
else:
print("不及格")

這種寫法在分數分級這類題目很常見,比寫成 score >= 90 and score <= 100 更短也更好讀。

一個條件不夠用時,可以用 andornot 把幾個條件組起來。

and:兩邊都成立,整體才成立。

age = int(input("你的年齡:"))
if age >= 13 and age <= 19:
print("你是青少年")
else:
print("你不是青少年")

or:只要有一邊成立,整體就成立。

day = input("今天星期幾?(填一到日)")
if day == "" or day == "":
print("週末,放假!")
else:
print("要上班上課")

not:把成立與不成立顛倒過來。not TrueFalsenot FalseTrue。先照預設的 n 執行一次,再改成 y 送出,看 is_raining 變成 Truenot is_raining 翻成 False,換走 else 那條路:

answer = input("現在在下雨嗎?(y/n)")
is_raining = answer == "y"
if not is_raining:
print("天氣不錯,出門不用帶傘")
else:
print("記得帶傘")

三個運算子的組合就這幾種,每一列從左讀到右就是一條運算式(not 只接右邊一個值,左邊留空),忘記的時候回來查:

左邊運算子右邊結果
TrueandTrueTrue
TrueandFalseFalse
FalseandTrueFalse
FalseandFalseFalse
TrueorTrueTrue
TrueorFalseTrue
FalseorTrueTrue
FalseorFalseFalse
notTrueFalse
notFalseTrue

看出規律了嗎?and 只有兩邊都是 True 才得到 Trueor 只有兩邊都是 False 才得到 False

v0.4.0 (148a67b)