《Python編程思想》總目錄
上一篇:Python編程思想(8):使用字典
目錄
if語句用於進行條件判斷,可以使用布爾表達式或布爾值作爲分支條件判斷。Python語言的if語句既可以作爲普通語句使用,也可以作爲表達式使用。下面先介紹if語句作爲普通語句使用的方法。
1. if語句基礎
Python語言的ifi語句有如下3種形式。
第1種形式:
if expression:
statements...
第2種形式:
if expression:
statements...
else:
statements...
第3種形式:
if expression:
statements
elif expression1: # 可以有任意多個elif語句
statements1...
elif expression2:
statements2...
else:
statements...
在上面if語句的3種形式中,第2種形式和第3種形式類似的,如果第2種形式中的elif子句不出現,則變成了第2種形式。也就是說,第3種形式其實是第2種形式的特例。
對於上面的if語句,會按下面的過程執行:
1. 如果if條件爲True,程序就會執行if條件後面的多條語句;
2. 如果if條件爲False,就會依次判斷elif條件,如果某一個elif條件爲True,程序就會執行該elif條件後面的多條語句;
3. 如果前面所有條件都爲False,程序就會執行else子句中的所有代碼(如果有else子句的話);
要注意的是,在if語句中, if expression:、 elif expression:和else:後面縮進的多行代碼被稱爲代碼塊,一個代碼塊會被當做一個整體來執行,除非遇到了return、break、continue等語句,會終止代碼塊後面語句的執行。
在使用Python語言時要注意,Python語言中的所有語句(包括條件、循環等)都使用縮進來標記代碼塊,而大多數編程語言都是用一對花括號來標記代碼塊。所以在使用Python時一定要注意縮進,縮進一旦亂了,就不容易調回原貌了。所以說,Python語言儘管強大,但Python語言本身並不是一種格式自由的語言。
下面看一個典型的if語句案例:if語句基礎.py
name = input("請輸入你的名字:")
if name == "Bill" :
# 只有在name等於Bill時,纔會執行下面兩條語句
# 這兩條語句是一個整體,要麼一起執行,要麼都不執行
print("這是我們的CEO")
print("CEO正在開會,一個小時後才能見記者")
else:
# 當輸入的name不是Bill時,會執行下面的兩條語句
print('對不起,我不認識這個人')
print('請重新輸入名字')
運行上面代碼,如果輸入的name是Bill,則會輸出下面的結果
這是我們的CEO
CEO正在開會,一個小時後才能見記者
如果輸入的name不是Bill,則會輸出下面的結果:
對不起,我不認識這個人
請重新輸入名字
2. 由於縮進錯誤引發的血案
需要說明的是,雖然 Python語法允許代碼塊隨意縮進N個空格(或其它空白符,如Tab),但同一個代碼塊內的代碼必須保持相同的縮進,也就是說,不能一會縮進2個空格,一會縮進4個空格。
例如下面的代碼就會發生錯誤。
示例代碼:if語句錯誤.py
name = input("請輸入你的名字:")
if name == "Bill" :
print("這是我們的CEO")
print("CEO正在開會,一個小時後才能見記者")
上面代碼中,由於if語句後面沒有縮進的代碼,其實相當於if語句沒有了代碼塊,所以Python程序執行會拋出如圖1所示的錯誤。
就算if語句的代碼塊中所有的語句都有縮進,但由於縮進的尺度不同,在執行時也會拋出異常,看下面的代碼:
示例代碼:if語句錯誤1.py
name = input("請輸入你的名字:")
if name == "Bill" :
print("這是我們的CEO")
print("CEO正在開會,一個小時後才能見記者")
在上面的代碼中,倒數第2條語句縮進了4個空格,而最後一條語句縮進了5個空格,所以執行這段代碼,會拋出如圖2所示的異常。
還有一些情況,儘管程序執行不會有任何問題,但由於縮進的錯誤,會導致程序邏輯出現問題。例如,下面的代碼,最後一條語句本應該屬於if語句,但由於沒有縮進,所以if語句和最後一條print語句其實是平級的,則就會導致不管輸入的是什麼,都會執行最後一條print語句。
示例代碼:if沒有縮進.py
name = input("請輸入你的名字:")
if name == "Bill" :
print("這是我們的CEO")
print("CEO正在開會,一個小時後才能見記者")
另外,組成代碼塊的不光是縮進,還有冒號(:),也就是說,代碼塊的是從冒號開始的,所以在if、elif和else後面,千萬不要忘了寫冒號,否則Python程序不會成功運行。
在下面的代碼中,if語句後面沒有寫冒號。
示例代碼:if沒有冒號.py
name = input("請輸入你的名字:")
if name == "Bill"
print("這是我們的CEO")
print("CEO正在開會,一個小時後才能見記者")
運行這段代碼,會輸出如下的錯誤。
File "/Python編程思想/04-控制流程/if沒有冒號.py", line 13
if name == "Bill"
^
SyntaxError: invalid syntax
3. if條件的類型
從前面的例子可以看出,if語句的條件似乎只有布爾類型,或者是True,或者是False,那麼是不是隻有布爾類型呢?其實並不是這樣的。if語句的條件可以是任意類型,這些類型的值最終都會被解釋爲布爾類型。而這些類型的一些特殊值會被解釋成False,其他的值都被認爲是True。
if語句的條件支持的主要類型包括布爾、對象、數值、字符串、元組、列表和字典,這些類型中如下的值會被解釋爲False。
False、None、0、""、()、[]、{}
從被解釋爲False的值看出,所有的集合類型,都是空集合被解釋爲False,而基礎類型,一般都是該類型的默認值(如數值的0,字符串的空串)被解釋爲False。
示例代碼:if條件的類型.py
# 定義空字符串
s = ""
if s :
print('s不是空字符串')
else:
print('s是空字符串')
# 定義爲0的值
value = 0
if value:
print('value的值不是0')
else:
print('value的值是0')
value = 0
# 定義空列表
persons = []
if persons:
print('persons不是空列表')
else:
print('persons是空列表')
# 定義空字典
data = {}
if data:
print('data不是空字典')
else:
print('data是空字典')
4. pass語句
如果使用縮進標識代碼塊會帶來一個問題,就是如果代碼塊爲空,也就是沒有一行代碼的代碼塊該如何處理呢?如果使用其他語句,如Java,就用一對空的大括號就可以了,但Python該如何做呢?其實Python的設計者也考慮到這種情況了,這就是pass語句。首先要知道,Python的代碼塊必須至少有一條語句,否則就沒有所謂的縮進了。如果代碼塊中確實沒有一條實際的代碼,那麼就用pass語句代替,pass代表空語句,其實就是一個語句佔位符,用來確定代碼縮進的。
示例代碼:pass語句.py
name = input("請輸入你的名字:")
if name == "Bill" :
# 只有在name等於Bill時,纔會執行下面兩條語句
# 這兩條語句是一個整體,要麼一起執行,要麼都不執行
print("這是我們的CEO")
print("CEO正在開會,一個小時後才能見記者")
else:
pass # 代碼塊中沒有任何語句時,必須用pass