有條件的運算

首先,最常見的需要控制的場合會出現在有條件的運算上,比如說我們想要用月份來判定季節:

如果 3 <= month <= 5的話
    print('現在是春季')

if 述句

我們發現,並不是所有的情形都需要印出 '現在是春季',只有當某些條件被滿足時,該行才被執行,如果程式只允許我們由上而下的執行走法,我們就無法完成這個任務,所以我們需要能夠進行有條件的運算,"如果" 這個字就是重點,只是我們用英文的 if:

if 3 <= month <= 5:
    print('現在是春季')

對!就是那麼簡單,不過這邊有好幾點需要好好說明,首先是整個 if 述句的文法:

if 條件:
   區塊程式碼(suite)

if 的後面,需要緊跟著一個條件,條件的後面要跟著一個冒號,這個條件會在 布林語境 中被解析為真或假,當該條件為真,則緊跟在後面的區塊程式碼 (block,或在 Python 中的特殊名稱 suite ) 會被執行,否則會略過 suite 往後執行。

布林語境就是談論真假、運算真假的情境,比如說 if 述句中的條件,就是一個布林語境作用的地方 (條件就是談論真假嘛),在 Python 中,0None 和所有的空資料 (空清單、空字串等) 在布林語境中會被解析為 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。

results matching ""

    No results matching ""