有條件的運算
首先,最常見的需要控制的場合會出現在有條件的運算上,比如說我們想要用月份來判定季節:
如果 3 <= month <= 5的話
print('現在是春季')
if 述句
我們發現,並不是所有的情形都需要印出 '現在是春季'
,只有當某些條件被滿足時,該行才被執行,如果程式只允許我們由上而下的執行走法,我們就無法完成這個任務,所以我們需要能夠進行有條件的運算,"如果" 這個字就是重點,只是我們用英文的 if
:
if 3 <= month <= 5:
print('現在是春季')
對!就是那麼簡單,不過這邊有好幾點需要好好說明,首先是整個 if
述句的文法:
if 條件:
區塊程式碼(suite)
在 if
的後面,需要緊跟著一個條件,條件的後面要跟著一個冒號,這個條件會在 布林語境 中被解析為真或假,當該條件為真,則緊跟在後面的區塊程式碼 (block,或在 Python 中的特殊名稱 suite ) 會被執行,否則會略過 suite 往後執行。
布林語境就是談論真假、運算真假的情境,比如說
if
述句中的條件,就是一個布林語境作用的地方 (條件就是談論真假嘛),在 Python 中,0
、None
和所有的空資料 (空清單、空字串等) 在布林語境中會被解析為False
,除此之外的一切資料都是True
。
屬於該 if
的 suite 程式碼,每一行都需要以相同的縮排來陳列,比如說我們可以選擇都空四格,一旦縮排不一致,將會導致程式的錯誤,我們來看看以下例子:
if 3 <= month <= 5:
print('現在是春季')
print('一年之計在於春')
print('這裡不屬於if區塊')
我們發現緊跟在 if
述句冒號後面的兩行,一致地進行了 4 個空白的縮排,Python 將會認定此兩行為 if
的suite,而最後一行的 print
由於沒有縮排,故是一個獨立的敘述,我們發現如果 if
的條件成真的話,會印出:
現在是春季
一年之計在於春
這裡不屬於if區塊
如果條件為假會印出:
這裡不屬於if區塊
要取用怎麼樣的縮排是大家的自由,但是 Python 界中有個不成文的規定,那就是統一用 4 個空格來縮排,如果讀者嫌麻煩,可以在自己喜歡的編輯器裡將 tab 以 4 個空格取代。
else 述句
有的時候,條件不會那麼簡單,比如說我們將我們的功能作的更完整:
if 3 <= month <= 5:
print('現在是春季)'
else:
print('現在不是春季)'
else
是搭配著 if
延伸出來的語法,當 if
的條件為真時,屬於 else
區塊的程式碼將不被執行,反之該區塊的程式碼被執行,if
區塊的程式碼被略過,else
的後面不需要條件,但是冒號絕對是必須的。
讀者們將會發現,要進入suite之前,一定會先寫出冒號。記住這種架構: 冒號後縮排寫出 suite。
假設原本 month==4
,會印出 '現在是春季'
,若 month==8
會印出 '現在不是春季'
。
無 suite 的 if/else 述句
另外,Python 提供了一個簡潔的 if/else 寫法:
string = '現在是春季' if 3 <= month <= 5 else '現在不是春季'
在這種寫法中,如果 if
後面的條件成立,則結果會是 if
前面的值,否則結果會是 else
後面的值。
elif 述句
當然,我們可以一次加入更多的條件:
if 3 <= month <= 5:
print('現在是春季')
elif 6 <= month <= 8:
print('現在是夏季')
elif 9 <= month <= 11:
print('現在是秋季')
else:
print('現在是冬季')
elif
是 else if 的縮寫,中文可以翻作否則如果,當 if
的條件不被滿足 (不為真) 的時候,會由上而下依序檢查每個 elif
的條件,第一個條件為真的 elif
區塊程式碼將被執行。
在上例中,假設 month==10
,由於 if
的條件: 3 <= month <= 5
為假且第一個 elif
的條件: 6 <= month <= 8
也是假,直到第二個 elif
的條件才為真,所以我們會執行第二個 elif
的 suite,也就是print('現在是秋季')
,當然,如果沒有任何一個述句為真,則我們會執行 else
的`suite。