Python編程思想(9):條件語句(if)

《Python編程思想》總目錄

上一篇:Python編程思想(8):使用字典

目錄

1. if語句基礎

2. 由於縮進錯誤引發的血案

3. if條件的類型

4. pass語句


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章