本專欄針對剛開始學習Python的小白開放,文章內容引用教材,均由泰迪學院與機械工業出版社共同策劃,校企聯合編寫,目前800餘所高校正在使用,為正版教材。請放心食用~
條件語句的運行邏輯為:如果條件被滿足(返回真值),可以做某件事情;如果條件不滿足(返回假值),就做另一件事情,或什麼也不做。
通過圖1,可以對條件語句的運行機製作簡單的了解。虛線框內是一個選擇結構,此結構中包含一個判斷條件和兩條執行語句,以及連接各部分的流向線。根據判斷條件(布爾表達式)返回值的情況,程序將選擇執行語句1或語句2。
圖 1條件結構
在Python中,實現選擇結構最普遍的工具是if語句。if語句中包含三種條件判斷句式,即if、elif和else。其中,if與elif部分都包含判斷條件,當判斷條件都不成立時,程序才能執行else部分的代碼。
if語句最基礎的形式是if-else,其基本語法格式如下。
if-else語句常用的參數及說明如表 1所示。
表 1 if-else語句常用的參數及說明
參數
說明
條件表達式
接受布爾表達式。表示判斷條件是否成立。無默認值
操作語句
接受操作語句。表示執行一段代碼。無默認值
if-else語句執行時,程序首先判斷if部分條件的真假。如果條件表達式返回真值,則執行操作語句1;如果返回假值,則執行操作語句2。
if-else語句的形式很簡單,通過條件判斷的結果即可決定下一步的執行方向,具有兩條分支。以編寫一個帳戶密碼登錄界面為例,介紹該語句的使用,如代碼 1所示。
代碼1 if-else語句實現登錄界面
In[1]:
name = input ('請輸入用戶名:')
password = input ('請輸入密碼:')
if name == "Lucy" and password == "123456":
print ('****登錄成功,歡迎!*****')
else:
print ('您的輸入有誤,登錄失敗!')
Out[1]:
請輸入用戶名:Lucy
請輸入密碼:123
您的輸入有誤,登錄失敗!
In[2]:
name = input ('請輸入用戶名:')
password = input ('請輸入密碼:')
if name == "Lucy" and password == "123456":
print ('****登錄成功,歡迎!*****')
else:
print ('您的輸入有誤,登錄失敗!')
Out[2]:
請輸入用戶名:Lucy
請輸入密碼:123456
****登錄成功,歡迎!*****
在代碼1中,使用input函數以支持交互式的輸入,並在函數括號內插入文字進行了輸入提示,增強了登錄界面的人性化。在if部分的條件判斷式中,使用and運算符進行且運算,只有帳戶和密碼都輸入正確時才能成功登錄,從而增加了安全性。
if-else語句可以縮減為單行形式,其基本語法格式如下。
操作語句1 if 條件表達式 else 操作語句2
if-else語句單行形式語法格式中的參數說明與表1一致。如果條件表達式返回的結果為真,則執行if前面的操作語句1,否則執行else後面的操作語句2。
if-else語句使用單行形式的目的主要在於增加代碼的簡潔性,其基本使用方法如代碼2所示。
代碼2 if-else語句的單行形式
In[3]:
num1, num2 = 11, 90
print('num1加num2為百分數') if 1000 > num1 + num2 >100 else
print('num1加num2不為百分數')
Out[3]:
num1加num2為百分數
if-else語句有明顯的缺陷,即只能實現兩條分支。實際工作中需要用到的條件分支數目可能難以想像,擴展if語句的分支需要用到elif句式。elif是「else if」的縮寫,即「下一條件是否成立?」。使用elif有簡潔,減少過分縮排的效果。將elif代碼塊放在if和else之間,就組成了if-elif-else語句。理論上,if語句中的elif可以無限多。if-elif-else語句與if-else語句其實是等價的,後者相當於前者中elif個數為0或不執行的情況。由於if-elif-else語句提供更多條件分支,因此更被普遍使用,其基本語法格式如下。
if 條件表達式1:
操作語句1
elif 條件表達式2:
操作語句2
else:
操作語句3
if-elif-else語句語法格式中的參數與表1一致。該語句執行時,按照從上到下的順序,依次檢查每個條件表達式返回值的情況,任何一個條件表達式返回真值,就執行該表達式下面的操作語句。若所有條件表達式都返回假值,則執行else下面的操作語句。
if-elif-else語句相對於if-else語句優勢明顯,可以實現更為複雜的功能。使用if-elif-else語句實現年齡段的判斷,如代碼3所示。
代碼3使用if-elif-else語句實現年齡段的判斷
In[4]:
age = input('請輸入您的年齡:')
age = int(age)
if age < 18:
print('未成年人!')
elif age >= 18 and age <= 25:
print('青年人!')
elif age > 25 and age <= 60:
print('中年人!')
else:
print('老年人!')
Out[4]:
請輸入您的年齡: 20
青年人!
代碼3通過比較運算符實現了年齡段劃分,並能區分年齡段界限,避免邏輯出錯。這裡需要注意,input函數將接收的任何數據類型都默認為str,如果不在該代碼中插入轉換接收數據類型的語句,程序將無法執行。這是因為,接收的年齡數據會被用於和後續的年齡數值比較,而number與str是無法比較的。
需要說明,if語句還有一種形式是if-if-else,這一形式中的if可以有多個,從而實現多分枝。與if-elif-else語句相比,差異不僅僅存在於形式上,性能也同樣有分別,使用多個if的效率更低,它實際上是多重if語句。
if語句支持嵌套,即在一個if語句中嵌入另一個if語句,從而構成不同層次的選擇結構。嵌套的意義在於,實現多層選擇結構。使用嵌套對條件語句的功能有升華作用,這與elif是相似的,elif將有限的條件分支擴展,嵌套則提供了建立多層選擇結構的工具,兩者分別在不同的維度上提升if語句的功能性。使用嵌套需要以不同的縮進長度劃分代碼結構的層次,因此嵌套時要特別注意縮進的規範性。
嵌套選擇結構具有很廣的應用場景,以下給出一個例子。假設系統中存儲了五個用戶的身份信息,分別是:來自英國的Tom,35歲;來自法國的Frank,35歲;來自德國的Bob,35歲;來自澳大利亞的Washington,51歲;來自南非的Jane,21歲。設計一個程序,詢問用戶的部分信息,在對方不說出自己名字的情況下識別其身份,如代碼4所示。
代碼4 嵌套if-elif-else語句
In[5]:
age = input('請輸入你的年齡:')
age = int(age)
if age == 35:
nation = input('請輸入你的國籍:')
if nation == '英國':
print('你是Tom! ')
elif (nation == '法國'):
print('你是Frank! ')
else:
print('你是Bob! ')
elif age == 21:
print('你是Jane,來自南非! ')
elif age == 51:
print('你是Washington,來自澳大利亞! ')
else:
print('請輸入正確年齡值! ')
Out[5]:
請輸入你的年齡:35
請輸入你的國籍:法國
你是Frank!
從代碼4可以看到,該程序具有兩層選擇結構。第一層用於詢問年齡,程序通過接收的年齡,可以判斷輸入者是Jane、Washington或其他3個同齡人人中的一人;若收到的值不在這五人年齡範圍中,則提示輸入出錯;若收到的值是3個同齡人的歲數,則進入下一層選擇結構,即詢問國籍;通過詢問國籍,程序可以準確報出輸入者的信息。
使用if語句時,需要注意以下幾點。
(1)條件判斷語句應儘量簡單,若語句複雜則應當將運算先放到一個變量中。
(2)Python的條件語句中允許常用的數值比較運算(==,!=,>,>=,<,<=)。
(3)Python允許無限次if語句嵌套,但實際編程中如果必須用到3到4級嵌套,建議考慮用其他方法編寫代碼,嵌套超過兩層會使程序的運行效率大打折扣。
如果你get到了今天的知識~別忘了關注、轉發、點讚、在看哦~