今天給大家?guī)?a href="http://www.brongaenegriffin.com/tags/python/" target="_blank">python條件判斷
1、前言
到目前為止,Python基礎系列的文章中的程序都是一條一條語句順序執(zhí)行的。在本章中,我會重點介紹讓程序選擇是否執(zhí)行語句塊的方法。
Python程序為什么可以實現(xiàn)自我選擇的功能呢?因為它可以根據(jù)條件進行判斷是否執(zhí)行下面的語句塊。
2、條件判斷
1.1 語句塊
什么是語句塊呢?
語句塊是在條件為真(條件語句)時執(zhí)行或者執(zhí)行多次(循環(huán)語句)的一組語句。在代碼前放置空格來縮進語句即可創(chuàng)建語句塊。
關于縮進:
使用tab鍵也可以縮進語句塊。Python將一個tab字符解釋為到下一個tab字符位置的移動,而一個tab字符位置為8個空格,但是標準且推薦的方式是只用空格,尤其是在每個縮進需要4個空格的時候。
在Python中,英文版冒號(:)用來標識語句塊的開始,塊中的每一個語句都是縮進的(縮進量相同)。當回退到和已經(jīng)已經(jīng)閉合的塊一樣的縮進量時,就表示當前塊已經(jīng)結束了(這個不用擔心,很多程序編輯器和集成開發(fā)環(huán)境都知道如何縮進語句塊,可以幫助用戶輕松把握縮進)?。?!
1.2 條件和條件語句
傳說中的if語句就要閃亮登場啦~~~
使用條件語句不要少寫了冒號(:),而且必須是英文版本的。
- if語句
對于if語句,若條件判定為真,那么后面的語句塊就會被執(zhí)行。若條件判定為假,語句塊就會被跳過,不會執(zhí)行。
1 #if語句
2 age = 20
3 if age >= 18:
4 print('your age is', age)
5 print('adult')
- else語句
else子句只是增加一種選擇(之所以叫做子句是因為它不是獨立的語句,而是if的一部分)。if...else...搭配,若if語句為False,不執(zhí)行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')
- elif語句
如果需要檢查多個條件,就可以使用elif,它是else if的簡寫,也是if和else語句的聯(lián)合使用,即使用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')
- 條件語句總結
if < 條件判斷1 >:
< 執(zhí)行1 >
elif < 條件判斷2 >:
< 執(zhí)行2 >
elif < 條件判斷3 >:
< 執(zhí)行3 >
else:
< 執(zhí)行4 >
- 注意點
if
語句執(zhí)行有個特點,它是從上往下判斷,如果在某個判斷上是True
,把該判斷對應的語句執(zhí)行后,就忽略掉剩下的elif
和else語句
,所以,請測試并解釋為什么下面的程序打印的是teenager:
1 #條件語句執(zhí)行特點:從上往下判斷
2 age = 20
3 if age >= 6:
4 print('teenager')
5 elif age >= 18:
6 print('adult')
7 else:
8 print('kid')
- input()運用
最后看一個有問題的條件判斷。很多同學會用input()
讀取用戶的輸入,這樣可以自己輸入,程序運行得更有意思,更有人性化。其實啊,Error往往出現(xiàn)在意想不到的地方。不信,來看段代碼:
#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()
返回的數(shù)據(jù)類型是str
,str
不能直接和整數(shù)比較,必須先把str
轉換成整數(shù)。Python提供了int()
函數(shù)來完成這件事情。
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
因此,在編程中,條件判斷是非常重要的。條件判斷可以讓計算機自己做選擇,Python的if...elif...else很靈活。條件判斷從上向下匹配,當滿足條件時執(zhí)行對應的塊內(nèi)語句,后續(xù)的elif和else都不再執(zhí)行。
1.3 條件運算符
條件判斷,if語句重在判斷并選擇是否執(zhí)行,而沒有過多涉及條件本身。
下面是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。
有些運算符值得特別關注:
一、相等運算符
如果想要知道兩個內(nèi)容是否相等,你應該使用相等運算符,即兩個等號==。請務必記得是兩個等號?。?!單個等號可是賦值啊~~~
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運算符。
小結
- 等號運算符:==,單個等號=為賦值運算符;
- Python的條件判斷if...elif...else很靈活;
- 條件判斷從上向下匹配;
- 短路邏輯適用于布爾運算符(and,or)。
好了,今天就介紹到這兒。
評論