時間不多,今天直接進入正題!
在許多的程式語言中,執行順序一般都是由上往下,逐字逐句的檢視與執行,而透過某些關鍵字,我們可以改變或跳過某些程式碼的執行,而這個流程通常會稱作流程控制(control flow)或是條件判斷 (
conditionals)。
在 Python 中,執行流程可以透過兩種方式產生改變:
True
時,才會執行一段或多段程式碼。True
,一段或多段程式碼將會重複執行。為了進行流程控制,我們可以使用 if
(如果)與 else
(要不然)這兩個關鍵字,來描述在特定狀況下,應該對應產生的行為。
if
條件在 Python 中,關鍵字 if
可以用來檢查某個表達式,也就是「某個條件」是否為 True
,當確定為 True
時,則會執行相應的程式區塊。
a = 3
if a > 0:
print('A 是正數') # A 是正數
如上範例所示,由於 3
大於 0
,所以此時 if
的條件結果為 True
,因此執行了冒號後面的區塊程式碼。
如果條件為 False
,那麼程式碼區塊就不會被執行。
else
條件a = -1
if a > 0: # 由於 -1 > 0 並不成立,後面的程式碼並不會執行。
print('A 是正數')
在只有 if
的狀況下,當 if
的表達式得到的結果為 False
,後續的程式碼都不會被執行,也因此為了處理 if
條件為 False
的情況,我們可以使用 else
語句,讓 Python 執行 else
區塊的程式碼。
a = -1
if a > 0:
print('A 是正數')
else:
print('A 是負數') # A 是負數
elif
條件那如果我們的條件多於兩個呢?畢竟 a 除了大於 0、小於 0,也有可能等於 0,所以此時我們可以使用 elif
(或者如果),當 elif
的表達式也都為 False
時,Python 最後才會執行 else
區塊的程式碼。
a = 0
if a > 0:
print('A 是正數')
elif a == 0:
print('A 是零') # A 是零
else:
print('A 是負數')
因為 a = 0
符合 elif
表達式的條件,所以會執行 print('A 是零')
,並忽略後續的 else
的條件判斷。
在復健第三天:布林值 Boolean 與運算子 Operators的文章裡,我們講到可以使用邏輯運算子 Logical Operators來進行邏輯運算。
and
並且我們可以透過 and
邏輯運算子來簡化多個條件的判斷,使用 and
可以依次檢查所有條件,若所有條件皆為 True
,才會執行程式碼。而只要其中一個條件為 False
,則立刻停止檢查並跳到下一個條件判斷(如果有存在的話)。
a = 0
if a > 0 and a % 2 == 0:
print('A 是正數且是偶數')
elif a > 0 and a % 2 != 0:
print('A 是正數')
elif a == 0:
print('A 是零') # 這行會被執行
else:
print('A 是負數')
or
或者和 and
的功能類似類似,or
會依次檢查條件是否成立。只要其中任何一個條件為 True
,就會立刻停止檢查並執行區塊內的程式碼;若「所有條件」皆為 False
時,才會跳到下一個條件判斷(如果有的話)。
user = 'James'
access_level = 6
if user == 'admin' or access_level >= 4:
print('授予存取權限!') # 由於 access_level 大於 4,這行會被執行
else:
print('存取權限拒絕!')
透過以上的條件判斷,我們可以簡易地模擬現實生活中的許多情境,像是買東西:
把以上這句話轉換成 Python 的 control flow,則可以寫為:
我的錢包 = 35
天氣 = '大太陽'
if 我的錢包 > 80 and 天氣 = '大太陽':
print('手搖飲')
elif 我的錢包 > 35:
print('養樂多')
else:
print('我什麼都不買')
# 最後會印出 '養樂多'
流程控制算是我覺得所有學習的章節裡,最有趣也最貼近生活的地方,因為我們的日常裡有許多事件都要依照各種條件、情境來判斷該做出什麼選擇,可是我們身為人無法達到全然的理性,所以像是前面的「買飲料」情境題,當我們的錢包有 100 元時,無論天氣是否為 '大太陽'
,有很大的機率還是會去買手搖杯(吧?)。