Python基礎——條件判斷


  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,把該判斷對應的語句執行后,就忽略掉剩下的elifelse語句,所以,請測試並解釋為什么下面的程序打印的是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()返回的數據類型是strstr不能直接和整數比較,必須先把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中常見的條件運算符:

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)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM