Python版本:3.6.2 操作系統:Windows 作者:SmallWZQ
到目前為止,Python基礎系列的文章中的程序都是一條一條語句順序執行的。在本章中,我會重點介紹讓程序選擇是否執行語句塊的方法。
Python程序為什么可以實現自我選擇的功能呢?因為它可以根據條件進行判斷是否執行下面的語句塊。
Python基礎——數據類型中講到的布爾值就與條件判斷有着必然的聯系。
條件判斷
1.1 語句塊
什么是語句塊呢?
語句塊是在條件為真(條件語句)時執行或者執行多次(循環語句)的一組語句。在代碼前放置空格來縮進語句即可創建語句塊。
關於縮進:
使用tab鍵也可以縮進語句塊。Python將一個tab字符解釋為到下一個tab字符位置的移動,而一個tab字符位置為8個空格,但是標准且推薦的方式是只用空格,尤其是在每個縮進需要4個空格的時候。
在Python中,英文版冒號(:)用來標識語句塊的開始,塊中的每一個語句都是縮進的(縮進量相同)。當回退到和已經已經閉合的塊一樣的縮進量時,就表示當前塊已經結束了(這個不用擔心,很多程序編輯器和集成開發環境都知道如何縮進語句塊,可以幫助用戶輕松把握縮進)!!!
1.2 條件和條件語句
傳說中的if語句就要閃亮登場啦~~~
使用條件語句不要少寫了冒號(:),而且必須是英文版本的。
1. if語句
對於if語句,若條件判定為真,那么后面的語句塊就會被執行。若條件判定為假,語句塊就會被跳過,不會執行。
1 #if語句 2 age = 20 3 if age >= 18: 4 print('your age is', age) 5 print('adult')
2. else語句
else子句只是增加一種選擇(之所以叫做子句是因為它不是獨立的語句,而是if的一部分)。if...else...搭配,若if語句為False,不執行if下的語句塊,而去else下的語句塊。
1 #if...else...語句 2 age = 3 3 if age >= 18: 4 print('your age is', age) 5 print('adult') 6 else: 7 print('your age is', age) 8 print('teenager')
3. elif語句
如果需要檢查多個條件,就可以使用elif,它是else if的簡寫,也是if和else語句的聯合使用,即使用elif做更細致的判斷:
1 #if...elif...elif...else...語句 2 age = 3 3 if age >= 18: 4 print('adult') 5 elif age >= 6: 6 print('teenager') 7 else: 8 print('kid')
4. 條件語句總結
if <條件判斷1>: <執行1> elif <條件判斷2>: <執行2> elif <條件判斷3>: <執行3> else: <執行4>
5. 注意點
if
語句執行有個特點,它是從上往下判斷,如果在某個判斷上是True
,把該判斷對應的語句執行后,就忽略掉剩下的elif
和else語句
,所以,請測試並解釋為什么下面的程序打印的是teenager:
1 #條件語句執行特點:從上往下判斷 2 age = 20 3 if age >= 6: 4 print('teenager') 5 elif age >= 18: 6 print('adult') 7 else: 8 print('kid')
6. input()運用
最后看一個有問題的條件判斷。很多同學會用input()
讀取用戶的輸入,這樣可以自己輸入,程序運行得更有意思,更有人性化。其實啊,Error往往出現在意想不到的地方。不信,來看段代碼:
#if語句中使用input()方法 birth = input('birth: ') if birth < 2000: print('00前') else: print('00后')
輸入1993,結果報錯:
Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unorderable types: str() > int()
為什么呢?我在剛接觸Python時,用到此處報錯也是百思不得其解,同樣糾結了好久。直到后來,我才慢慢懂了。
關於input(),我在隨筆《Python基礎——輸出[print()]與輸入[input()]》中已經講得比較詳細了。
這是因為input()
返回的數據類型是str
,str
不能直接和整數比較,必須先把str
轉換成整數。Python提供了int()
函數來完成這件事情。
s = input('birth: ') birth = int(s) if birth < 2000: print('00前') else: print('00后')
因此,在編程中,條件判斷是非常重要的。條件判斷可以讓計算機自己做選擇,Python的if...elif...else很靈活。條件判斷從上向下匹配,當滿足條件時執行對應的塊內語句,后續的elif和else都不再執行。
1.3 條件運算符
條件判斷,if語句重在判斷並選擇是否執行,而沒有過多涉及條件本身。
下面是Python中常見的條件運算符:
表達式 | 描述 |
x == y | x 等於 y |
x < y | x 小於 y |
x > y | x 大於 y |
x >= y | x 大於等於 y |
x <= y | x 小於等於 y |
x != y | x 不等於 y |
x is y | x和y是同一個對象 |
x is not y | x和y不是同一對象 |
x in y | x是y容器的成員 |
x not in y | x不是y容器的成員 |
在Python中,比較運算和賦值運算是可以連接的——幾個運算符可以連在一起使用,比如: 0 < age <120。
有些運算符值得特別關注:
一、相等運算符
如果想要知道兩個內容是否相等,你應該使用相等運算符,即兩個等號==。請務必記得是兩個等號!!!單個等號可是賦值啊~~~
1 #相等運算符== 2 >>>"python" == "python" 3 True 4 >>>"Python" == "python" 5 False 6 >>>"python" = "python" 7 File "<stdin>", line 1 8 SyntaxError: can't assign to literal 9 #很明顯,單個相等運算符是賦值運算符,是用來改變值的,而不能用來比較
二、is:同一性運算符
這個定義很不友好,什么是同一性?首次接觸真是雲里霧里啊,真正理解is運算符才知道同一性的真諦。
乍一看,is運算符和==一樣,事實上卻不同。
示例代碼如下:
1 #同一性運算符:is 2 #is和==之間的差異 3 >>>x = y = [1,2,3] 4 >>>z = [1,2,3] 5 >>>x == y 6 True 7 >>>x == z 8 True 9 >>>x is y 10 True 11 >>>y is x 12 True 13 >>>x is z 14 False 15 >>>z is x 16 False
注:==運算符比較兩個對象是否相等,is判定兩者是否等同(同一個對象)。
三、in:成員資格運算符
四、布爾運算符:and、or和not
五、短路邏輯
短路???條件表達式中的布爾運算符就有這個特性。什么是短路邏輯呢?如下所示:
條件表達式:a and b,該表達式何時返回True呢?即a與b同時為真,若a判定為False,則無論b是真是假,該表達式都為為False。
事實上,如果x為假,條件表達式會返回x的值,否則返回y的值。這種行為被稱為短路邏輯。而短路邏輯同樣適用於or運算符。
小結
1. 等號運算符:==,單個等號=為賦值運算符;
2. Python的條件判斷if...elif...else很靈活;
3. 條件判斷從上向下匹配;
4. 短路邏輯適用於布爾運算符(and,or)。