if 分支判斷
April 14, 2022流程語法中最簡單也最常見的是 if
分支判斷,在 Python 中是這樣寫的:
import sys
name = 'Guest'
if len(sys.argv) > 1:
name = sys.argv[1]
print(f'Hello, {name}')
if/else 區塊
程式區塊是使用冒號 :
開頭,同一區塊範圍要有相同的縮排,不可混用不同空白數量,不可混用空白與 Tab,Python 建議使用四個空白作為縮排。
這個範例中,預設的名稱是 'Guest'
,如果執行時提供命令列引數,sys.argv
的長度就會大於 1(記得索引 0 會是.py 檔案名稱),len(sys.argv) > 1
的結果是 True
,if
條件成立,因而將name設定為使用者提供的命令列引數。一個執行範例如下:
>python hello.py
Hello, Guest
>python hello.py Justin
Hello, Justin
if
可以搭配 else
,在if條件不成立時,執行 else
定義的程式碼,例如寫個判斷數字為奇數或偶數的範例:
import sys
number = int(sys.argv[1])
if number % 2:
print('f{number} 為奇數')
else:
print(f'{number} 為偶數')
若是偶數,那麼 number % 2
會是0,在 if
判斷式中就會被認定為 False
,因此會執行 else
區塊內容。一個執行範例如下:
>python is_odd.py 10
10 為偶數
>python is_odd.py 9
9 為奇數
Python的 區塊定義方式,可以避免 C/C++、Java 這類 C-like 語言中,某些不明確的狀況。例如在 C-like 語言中,可能會出現這樣的程式碼:
if(condition1)
if(condition2)
doSometing();
else
doOther();
乍看之下,else
似乎是與第一個if配對,但實際上,else
是與最近的 if
配對,也就是第二個 if
。在 Python 中的區塊定義,就沒有這個問題:
if condition1:
if condition2:
do_something()
else:
do_other()
以上例而言,else
必定是與第一個 if
配對,如果是下例,else
必定是與第二個 if
配對:
if condition1:
if condition2:
do_something()
else:
do_other()
if/elif/else 區塊
只不過,if/else
在某些情況下若構成巢狀會不易閱讀,例如:
score = int(input('輸入分數:'))
if score >= 90:
print('得 A')
else:
if 90 > score >= 80:
print('得 B')
else:
if 80 > score >= 70:
print('得 C')
else:
if 70 > score >= 60:
print('得 D')
else:
print('不及格')
這類多重判斷,在 C-like 語言中,可以透過適當的排版,讓程式碼在視覺上形成瀑布式流程,不過 Python 中不能這麼做,因此提供了 if/elif/else
結構來解決這類多重判斷。例如:
score = int(input('輸入分數:'))
if score >= 90:
print('得 A')
elif 90 > score >= 80:
print('得 B')
elif 80 > score >= 70:
print('得 C')
elif 70 > score >= 60:
print('得 D')
else:
print('不及格')
談談 pass
有時在某個區塊中,並不想做任何的事情,或者是稍後才會寫些什麼,對於還沒打算寫任何東西的區塊,可以放個 pass
。例如:
if is_prime:
print('找到質數')
else:
pass
pass
就真的是 pass
,什麼都不做,只是用來維持程式碼語法結構的完整性,雖然如此,未來也許會常常用到它,因為經常地,你會想要作做些小測試,或者是先執行一下程式,看看其他已撰寫好的程式碼是否如期運作,這時 pass
就會派上用場。
pass
可以放在各式區塊,像是後續會談的 while
、for
、函式、類別定義區塊等。
if/else 運算式
Python 有個 if/else
運算式語法。直接來看看如何改寫先前奇偶數判斷程式碼:
import sys
number = int(sys.argv[1])
print('{} 為 {}'.format(number, '奇數' if number % 2 else '偶數'))
當 if
的條件式成立時,會傳回 if
前的數值,若不成立則傳回 else
後的數值。