今天給大家?guī)?a href="http://www.delux-kingway.cn/tags/python/" target="_blank">python條件判斷
1、前言
到目前為止,Python基礎(chǔ)系列的文章中的程序都是一條一條語句順序執(zhí)行的。在本章中,我會重點(diǎn)介紹讓程序選擇是否執(zhí)行語句塊的方法。
Python程序?yàn)槭裁纯梢詫?shí)現(xiàn)自我選擇的功能呢?因?yàn)樗梢愿鶕?jù)條件進(jìn)行判斷是否執(zhí)行下面的語句塊。
2、條件判斷
1.1 語句塊
什么是語句塊呢?
語句塊是在條件為真(條件語句)時執(zhí)行或者執(zhí)行多次(循環(huán)語句)的一組語句。在代碼前放置空格來縮進(jìn)語句即可創(chuàng)建語句塊。
關(guān)于縮進(jìn):
使用tab鍵也可以縮進(jìn)語句塊。Python將一個tab字符解釋為到下一個tab字符位置的移動,而一個tab字符位置為8個空格,但是標(biāo)準(zhǔn)且推薦的方式是只用空格,尤其是在每個縮進(jìn)需要4個空格的時候。
在Python中,英文版冒號(:)用來標(biāo)識語句塊的開始,塊中的每一個語句都是縮進(jìn)的(縮進(jìn)量相同)。當(dāng)回退到和已經(jīng)已經(jīng)閉合的塊一樣的縮進(jìn)量時,就表示當(dāng)前塊已經(jīng)結(jié)束了(這個不用擔(dān)心,很多程序編輯器和集成開發(fā)環(huán)境都知道如何縮進(jìn)語句塊,可以幫助用戶輕松把握縮進(jì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子句只是增加一種選擇(之所以叫做子句是因?yàn)樗皇仟?dú)立的語句,而是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做更細(xì)致的判斷:
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')
- 條件語句總結(jié)
if < 條件判斷1 >:
< 執(zhí)行1 >
elif < 條件判斷2 >:
< 執(zhí)行2 >
elif < 條件判斷3 >:
< 執(zhí)行3 >
else:
< 執(zhí)行4 >
- 注意點(diǎn)
if
語句執(zhí)行有個特點(diǎn),它是從上往下判斷,如果在某個判斷上是True
,把該判斷對應(yīng)的語句執(zhí)行后,就忽略掉剩下的elif
和else語句
,所以,請測試并解釋為什么下面的程序打印的是teenager:
1 #條件語句執(zhí)行特點(diǎn):從上往下判斷
2 age = 20
3 if age >= 6:
4 print('teenager')
5 elif age >= 18:
6 print('adult')
7 else:
8 print('kid')
- input()運(yùn)用
最后看一個有問題的條件判斷。很多同學(xué)會用input()
讀取用戶的輸入,這樣可以自己輸入,程序運(yùn)行得更有意思,更有人性化。其實(shí)啊,Error往往出現(xiàn)在意想不到的地方。不信,來看段代碼:
#if語句中使用input()方法
birth = input('birth: ')
if birth < 2000:
print('00前')
else:
print('00后')
輸入1993,結(jié)果報錯:
Traceback (most recent call last):
File "< stdin >", line 1, in < module >
TypeError: unorderable types: str() > int()
為什么呢?我在剛接觸Python時,用到此處報錯也是百思不得其解,同樣糾結(jié)了好久。直到后來,我才慢慢懂了。
這是因?yàn)?code>input()返回的數(shù)據(jù)類型是str
,str
不能直接和整數(shù)比較,必須先把str
轉(zhuǎn)換成整數(shù)。Python提供了int()
函數(shù)來完成這件事情。
s = input('birth: ')
birth = int(s)
if birth < 2000:
print('00前')
else:
print('00后')
因此,在編程中,條件判斷是非常重要的。條件判斷可以讓計(jì)算機(jī)自己做選擇,Python的if...elif...else很靈活。條件判斷從上向下匹配,當(dāng)滿足條件時執(zhí)行對應(yīng)的塊內(nèi)語句,后續(xù)的elif和else都不再執(zhí)行。
1.3 條件運(yùn)算符
條件判斷,if語句重在判斷并選擇是否執(zhí)行,而沒有過多涉及條件本身。
下面是Python中常見的條件運(yùn)算符:
表達(dá)式 | 描述 |
---|---|
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中,比較運(yùn)算和賦值運(yùn)算是可以連接的——幾個運(yùn)算符可以連在一起使用,比如:0 < age <120。
有些運(yùn)算符值得特別關(guān)注:
一、相等運(yùn)算符
如果想要知道兩個內(nèi)容是否相等,你應(yīng)該使用相等運(yùn)算符,即兩個等號==。請務(wù)必記得是兩個等號!?。蝹€等號可是賦值啊~~~
1 #相等運(yùn)算符==
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 #很明顯,單個相等運(yùn)算符是賦值運(yùn)算符,是用來改變值的,而不能用來比較
二、is:同一性運(yùn)算符
這個定義很不友好,什么是同一性?首次接觸真是云里霧里啊,真正理解is運(yùn)算符才知道同一性的真諦。
乍一看,is運(yùn)算符和==一樣,事實(shí)上卻不同。
示例代碼如下:
1 #同一性運(yùn)算符: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
注:==運(yùn)算符比較兩個對象是否相等,is判定兩者是否等同(同一個對象)。
三、in:成員資格運(yùn)算符
四、布爾運(yùn)算符:and、or和not
五、短路邏輯
短路???條件表達(dá)式中的布爾運(yùn)算符就有這個特性。什么是短路邏輯呢?如下所示:
條件表達(dá)式:a and b,該表達(dá)式何時返回True呢?即a與b同時為真,若a判定為False,則無論b是真是假,該表達(dá)式都為為False。
事實(shí)上,如果x為假,條件表達(dá)式會返回x的值,否則返回y的值。這種行為被稱為短路邏輯。而短路邏輯同樣適用于or運(yùn)算符。
小結(jié)
- 等號運(yùn)算符:==,單個等號=為賦值運(yùn)算符;
- Python的條件判斷if...elif...else很靈活;
- 條件判斷從上向下匹配;
- 短路邏輯適用于布爾運(yùn)算符(and,or)。
好了,今天就介紹到這兒。
評論