【Python 1-10】Python手把手教程之——一篇講透if語句以及if語句的特殊用法

做者 | 弗拉德
來源 | 弗拉德(公衆號:fulade_me)python

if 簡單示例

假設你有一個汽車列表,並想將其中每輛汽車的名稱打印出來。對於大多數汽車,都應以首字母大寫的方式打印其名稱,但對於汽車名'bmw',應以全大寫的方式打印。
下面的代碼遍歷一個列表,並以首字母大寫的方式打印其中的汽車名,但對於汽車名'bmw',以全大寫的方式打印:git

car_list = ['bmw','audi','toyota','honda']
for car in car_list:
    if car == 'bmw':
        print(car.upper())
    else: 
        print(car.title())

這個實例中,若是car的名字等於bmw就會調用upper()方法以大寫的方式來輸出結果,若是不等於bmw就以首字母大寫的方式輸出。
輸出結果以下:github

BMW
Audi
Toyota
Honda

條件語句

每條if語句的核心都是一個值爲TrueFalse的表達式,這種表達式被稱爲條件語句。Python根據條件判斷的值爲True仍是False來決定是否執行if語句中的代碼。若是條件判斷的值爲True, Python就執行緊跟在if語句後面的代碼;若是爲False,Python就不會執行這些代碼。編程

檢查是否相等

大多數條件判斷都將一個變量的當前值同特定值進行比較。最簡單的條件判斷檢查變量的值是否與某個值相等:app

car = 'bmw'
print(car == 'bmw')
True

咱們首先使用一個等號將car的值設置爲bmw。接下來,使用兩個等號==檢查car的值是否爲bmw。這個相等運算符在它兩邊的值相等時返回True,不然返回False。在這個示例中,兩邊的值相等,所以返回True
若是變量car的值不是bmw,上述判斷將返回False:編程語言

car = 'audi'
print(car == 'bmw')
False

一個第一個等號將將變量car的值設置爲audi。兩個等號是發問"變量car的值是bmw嗎?"。大多數編程語言使用等號的方式都與這裏示例的相同。函數

使用if時不考慮大小寫

在Python中檢查是否相等時區分大小寫,例如,兩個大小寫不一樣的值會被視爲不相等:post

car = 'Audi' 
print(car == 'audi')
False

若是大小寫很重要,這種行爲有其優勢。但若是大小寫可有可無,而只想檢查變量的值,可將變量的值轉換爲小寫,再進行比較:網站

car = 'Audi'
print(car.lower() == 'audi')
True

不管值Audi的大小寫如何,上述判斷都將返回True,由於該判斷不區分大小寫。函數lower()不會修改存儲在變量car中的值,所以進行這樣的比較時不會影響原來的變量:ui

car = 'Audi'
print(car.lower() == 'audi')
True 
print(car)
'Audi'

檢查不相等

要判斷兩個值是否不等,可結合使用歎號和等號!=,其中的歎號表示,在不少編程語言中都如此。
下面再使用一條if語句來演示如何使用不等運算符。咱們將把蘋果(Apple)存儲在一個變量中,而顧客想要購買的是橘子(Orange),輸出顧客不須要蘋果:

fruit = 'Apple'
if (fruit != 'Orange'):
    print('do not need ' + fruit)

fruit的值與Orange進行比較,若是它們不相等,Python 將返回True,進而執行緊跟在if語句後面的代碼;若是這兩個值相等,Python將返回False,所以 不執行緊跟在if語句後面的代碼。
因爲fruit的值不是Orange,所以執行了print語句。
咱們編寫的大多數條件表達式都檢查兩個值是否相等,但有時候檢查兩個值是否不等的效率更高。

比較數字

檢查數值很是簡單,例如,下面的代碼檢查一我的是不是18:

age = 18
print(age == 18)
True

你還能夠檢查兩個數字是否不等,例如,下面的代碼在提供的答案不正確時打印一條消息:

answer = 17
if answer != 42:
    print("That is not the correct answer. Please try again!")

條件語句中可包含各類數學比較,如小於小於等於大於大於等於:

age = 19
print(age < 21) 
True
print(age <= 21) 
True
print(age > 21)
False
print(age >= 21) 
False

在if語句中可以使用各類數學比較,使用起來也很簡單。

檢查多個條件

你可能想同時檢查多個條件,例如,咱們須要在兩個條件都爲True時才執行相應的操做,而有時候你只要求一個條件爲True時就執行相應的操做。在這些狀況下,關鍵字andor能夠幫助咱們省去不少事情。
1. 使用and檢查多個條件
要檢查是否兩個條件都爲True,可以使用關鍵字and將兩個條件判斷合而爲一;若是每一個判斷都經過了,整個表達式就爲True;若是至少有一個判斷沒有經過,整個表達式就爲False。例如,要檢查是否兩我的都不小於21歲,可以使用下面的判斷:

age_0 = 22 
age_1 = 18
print(age_0 >= 21 and age_1 >= 21)
False
age_1 = 22
print(age_0 >= 21 and age_1 >= 21)
True

咱們定義了兩個用於存儲年齡的變量age_0age_1。首先咱們檢查這兩個變量是否都大於或等於21,左邊的判斷經過了,但右邊的判斷沒有經過,所以整個條件表達式的結果爲False
接下來咱們將age_1改成22,這樣age_1的值大於21,所以兩個判斷都經過了,致使整個條件表達式的結果爲True
爲改善可讀性,可將每一個判斷都分別放在一對括號內,但並不是必須這樣作。若是你使用括號,判斷將相似於下面這樣:

(age_0 >= 21) and (age_1 >= 21)

2.使用or檢查多個條件
關鍵字or也可以讓你檢查多個條件,但只要至少有一個條件知足,就能經過整個判斷。僅當兩個判斷都沒有經過時,使用or的表達式才爲False
下面再次檢查兩我的的年齡,但檢查的條件是至少有一我的的年齡不小於21歲:

age_0 = 22 
age_1 = 18
print(age_0 >= 21 or age_1 >= 21)
True
age_0 = 18
print(age_0 >= 21 or age_1 >= 21)
False

一樣,咱們首先定義了兩個用於存儲年齡的變量。對age_0的判斷經過了, 所以整個表達式的結果爲True。接下來,咱們將age_0更改成18,在接下來的判斷中,兩個判斷都沒有經過,所以整個表達式的結果爲False

檢查特定值是否包含在列表中

有時候,執行操做前必須檢查列表是否包含特定的值。要判斷特定的值是否已包含在列表中,可以使用關鍵字in。你可能爲水果店編寫代碼,首先建立一個列表,其中包含用戶要買的水果,而後檢查特定的水果是否包含在該列表中:

fruits = ['apple','banana','cherry']
print('apple' in fruits)
True
print('orange' in fruits)
False

關鍵字in能夠幫助咱們檢查fruits是否包含appleorange。這種判斷頗有用,它能夠幫助咱們可以在建立一個列表後,輕鬆地檢查其中是否包含特定的值。

檢查特定值是否不包含在列表中

還有些時候,肯定特定的值未包含在列表中很重要。在這種狀況下,可以使用關鍵字not in。 例如,若是有一個列表,其中包含被禁止在論壇上發表評論的用戶,就可在容許用戶提交評論前檢查他是否被禁言:

banned_users = ['andrew', 'carolina', 'david'] 
user = 'marie'
if user not in banned_users:
    print(user.title() + ", you can post a response if you wish.")

若是user的值未包含在列表banned_users中,Python將返回True,進而執行縮進的代碼行。
用戶marie未包含在列表banned_users中,所以她將看到一條邀請她發表評論的消息:
Marie, you can post a response if you wish.

布爾表達式

與條件表達式同樣,布爾表達式的結果要麼爲True,要麼爲False
布爾值一般用於記錄條件,如遊戲是否正在運行,或用戶是否能夠編輯網站的特定內容:

game_active = True 
can_edit = False

布爾值判斷是一種高效的判斷方式。

if語句

理解條件語句後,就能夠開始編寫if語句了。前面討論條件語句時,列舉了多個if語句示例,下面更深刻地討論這個主題。

if-else 語句

常常須要在條件語句經過了時執行一個操做,並在沒有經過時執行另外一個操做。在這種狀況 下,可以使用Python提供的if-else語句。if-else語句塊相似於簡單的if語句,但其中的else語句讓你可以指定條件不知足時要執行的操做。
下面的代碼在一我的夠投票的年齡時顯示與前面相同的消息,同時在這我的不夠投票的年齡時也顯示一條消息:

age = 17
if age >= 18:
    print("You are old enough to vote!")  
    print("Have you registered to vote yet?")
else:
    print("Sorry, you are too young to vote.")
    print("Please register to vote as soon as you turn 18!")

條件語句經過了,就執行第一個縮進的print語句塊。若是判斷結果爲False,就執行後面的else代碼塊。此次age小於18,條件判斷未經過,所以執行else代碼塊中的代碼。
上述代碼之因此可行,是由於只存在兩種情形:要麼夠投票的年齡,要麼不夠。if-else結構很是適合用於要讓Python執行兩種操做之一的情形。在這種簡單的if-else結構中,老是會執行兩個操做中的一個。

if-elif-else 結構

常常須要檢查超過兩個的情形,爲此可以使用Python提供的if-elif-else結構。Python只執行if-elif-else結構中的一個代碼塊,它依次檢查每一個條件判斷,直到遇到經過了的條件判斷。判斷經過後,Python將執行緊跟在它後面的代碼,並跳過餘下的判斷。
在現實世界中,不少狀況下須要考慮的情形都超過兩個。例如,來看一個根據年齡段收費的 遊樂場:

  1. 4歲如下免費;
  2. 4-18歲收費5元;
  3. 18歲(含z以上收費10元。

若是隻使用一條if語句,如何肯定門票價格呢?下面的代碼肯定一我的所屬的年齡段,並打印一條包含門票價格的消息:

age = 12
if age < 4:
    print("Your admission cost is ¥0.")
elif age < 18:
    print("Your admission cost is ¥5.")
else:
    print("Your admission cost is ¥10.")

首先if判斷一我的是否不滿4歲,若是是這樣,就打印一條合適的消息,並跳過餘下的判斷。elif代碼行實際上是另外一個if判斷,它僅在前面的判斷未經過時纔會運行。在這裏,咱們知道這我的不小於4歲,由於第一個判斷未經過。若是這我的未滿18歲,Python將打印相應的消息,並跳過else代碼塊。若是if判斷和elif判斷都未經過,Python將運行最後一個else代碼塊中的代碼。
在這個示例中,第一個if的結果爲False,所以不執行其代碼塊。然而,第二個判斷的結果爲True(12小於18),所以將執行其代碼塊。輸出爲一個句子,向用戶指出了門票價格:

Your admission cost is ¥5.

只要年齡超過17歲,前兩個判斷就都不能經過。在這種狀況下,將執行else代碼塊,指出門票價格爲10元。爲讓代碼更簡潔,可不在if-elif-else代碼塊中打印門票價格,而只在其中設置門票價格, 並在它後面添加一條簡單的print語句:

age = 12
if age < 4:
    price = 0
elif age < 18:
    price = 5
else:
    price = 10
print("Your admission cost is ¥" + str(price) + ".")

使用多個elif代碼塊

可根據須要使用任意數量的elif代碼塊,例如,假設前述遊樂場要給老年人打折,可再添加 一個條件判斷,判斷顧客是否符合打折條件。下面假設對於65歲(含)以上的老人,能夠半價(即5元)購買門票:

age = 12
if age < 4:
    price = 0
elif age < 18:
    price = 5
elif age < 65:
    price = 10
else:
    price = 5
print("Your admission cost is ¥" + str(price) + ".")

這些代碼大都未變。第二個elif代碼塊經過檢查肯定年齡不到65歲後,纔將門票價格設置爲全票價格——10元。

省略else代碼塊

Python並不要求if-elif結構後面必須有else代碼塊。在有些狀況下,else代碼塊頗有用,而在其餘一些狀況下,使用一條elif語句來處理特定的情形更清晰:

age = 12
if age < 4: 
    price = 0
elif age < 18: 
    price = 5
elif age < 65: 
    price = 10
elif age >= 65: 
    price = 5
print("Your admission cost is ¥" + str(price) + ".")

第三個elif代碼塊在顧客的年齡超過65(含)時,將價格設置爲5元,這比使用else代碼塊更清晰些。通過這樣的修改後,每一個代碼塊都僅在經過了相應的判斷時纔會執行。

else是一條一應俱全的語句,只要不知足任何ifelif中的條件判斷,其中的代碼就會執行,這可能會引入無效甚至惡意的數據。若是知道最終要的條件,應考慮使用一個elif代碼塊來代替else代碼塊。這樣,你就能夠確定,僅當知足相應的條件時,你的代碼纔會執行。

判斷多個條件

if-elif-else結構功能強大,但僅適合用於只有一個條件知足的狀況,遇到經過了的判斷後,Python就跳過餘下的判斷。這種行爲很好,效率很高。
然而,有時候必須檢查你關心的全部條件。在這種狀況下,應使用一系列不包含elifelse代碼塊的簡單if語句。在可能有多個條件爲True,且你須要在每一個條件爲True時都採起相應措施時,適合使用這種方法。
下面再來看前面的水果店示例。若是顧客要了兩種水果,就須要確保在貨架上包含這些水果:

requested_fruits = ['pear','banana']
if 'apple' in requested_fruits: 
    print("Adding apple.")
if 'pear' in requested_fruits: 
    print("Adding pear.")
if 'banana' in requested_fruits: 
    print("Adding banana.")
print("\nFinished adding your fruits!")

咱們首先建立了一個列表,其中包含顧客要的水果。第一個if語句檢查顧客是否要了apple,若是要了,就打印一條確認消息。第二個if檢查水果pear的代碼也是一個簡單的if語句,而不是elifelse語句,所以無論前一個判斷是否經過,都將進行這個判斷。第三個if的代碼檢查顧客是否要了banana;無論前兩個判斷的結果如何,都會執行這些代碼。每當這個程序運行時,都會進行這三個獨立的判斷。 3
在這個示例中,會檢查每一個條件,所以將在列表中添加pearbanana輸出結果:

Adding pear.
Adding banana.

Finished adding your fruits!

若是像下面這樣轉而使用if-elif-else結構,代碼將不能正確地運行,由於有一個判斷經過:

requested_fruits = ['pear','banana']
if 'apple' in requested_fruits: 
    print("Adding apple.")
elif 'pear' in requested_fruits: 
    print("Adding pear.")
elif 'banana' in requested_fruits: 
    print("Adding banana.")
print("\nFinished adding your fruits!")

第一個判斷檢查列表中是否包含apple,它經過了,所以在購物車裏面添加apple。然而,Python將跳過if-elif-else結構中餘下的判斷,再也不檢查列表中是否包含pearbanana。其結果是,將添加顧客要的第一種水果,但不會添加其餘的水果:

Adding pear.

Finished adding your fruits!

總之,若是你只想執行一個代碼塊,就使用if-elif-else結構,若是要運行多個代碼塊,就使用一系列獨立的if語句。

使用if語句處理列表

經過結合使用if語句和列表,可完成一些有趣的任務:對列表中特定的值作特殊處理;高效地管理不斷變化的情形,如餐館是否還有特定的食材;證實代碼在各類情形下都將按預期那樣運行。

檢查特殊元素

在咱們開頭經過一個簡單示例演示瞭如何處理特殊值bmw——它須要採用不一樣的格式進行打印。既然你對條件判斷和if語句有了大體的認識,下面來進一步研究如何檢查列表中的特殊值,並對其作合適的處理。
繼續使用前面的比水果列表示例。每添加一種水果刀購物車都打印一條消息。經過建立一個列表,在其中包含顧客須要購買的水果,並使用一個循環來指出添加到購物車中的誰,能夠以極高的效率編寫這樣的代碼:

requested_fruits = ['apple', 'pear', 'banana']
for fruit in requested_fruits: 
    print("Adding " + fruit + ".")
print("\nFinished adding your fruits!")

輸出很簡單,由於上述代碼不過是一個簡單的for循環:

Adding apple.
Adding pear.
Adding banana.

Finished adding your fruits!

然而,若是水果店的apple賣完了,該如何處理呢?爲妥善地處理這種狀況,可在for循環中包含一條if語句:

requested_fruits = ['apple', 'pear', 'banana']
for fruit in requested_fruits: 
    if fruit == 'apple':
        print("Sorry, we are apple right now.")
    else:
        print("Adding " + fruit + ".")
print("\nFinished adding your fruits!")

這裏在往購物車裏面添加的每種水果都進行檢查。if代碼判斷顧客想要的是否是apple,若是是,就顯示一條消息,已經沒有apple了。else代碼塊確保其餘水果都能添加到購物車內:

Sorry, we are apple right now.
Adding pear.
Adding banana.

Finished adding your fruits!

肯定列表不是空的

到目前爲止,對於處理的每一個列表都作了一個簡單的假設,即假設它們都至少包含一個元素。可是在運行for循環前肯定列表是否爲空很重要。
下面在給顧客添加購物車時,先判斷線上商品列表是否是空的。若是列表是空的,就向顧客確認他是否要點蔬菜,若是列表不爲空,就像前面的示例那樣添加到購物車:

requested_fruits = []
if requested_fruits:
    for fruit in requested_fruits:
        print("Adding " + fruit + ".") 
        print("\nFinished adding your fruits!")
else:
    print("Are you sure you want some vegetables?")

在這裏,咱們首先建立了一個空列表,其中不包含任何水果。首先咱們進行了判斷,而不是直接執行for循環。當咱們直接判斷一個列表是,Python將在列表至少包含一個元素時返回True,並在列表爲空時返回False。若是requested_fruits不爲空,就運行與前一個示例相同的for循環,不然,就打印一條消息
在這裏,這個列表爲空,所以輸出以下——詢問顧客是否須要蔬菜:

Are you sure you want some vegetables?

若是這個列表不爲空,則會將水果添加到購物車中。

小做業:
10-1 檢查兩個數字相等、不等、大於、小於、大於等於和小於等於。
10-2 請建立一個名爲 brush_color 的畫筆變量,並將其設置爲'green'、'yellow'或'red'。編寫一條if語句,檢查畫筆是不是綠色的,若是是,就打印一條消息。
10-3 像練習 10-2 那樣設置畫筆的顏色,並編寫一個if-else結構。若是畫筆是綠色的,就打印一條消息。若是畫筆不是綠色的,就打印另外一條消息。
10-4 將練習 10-3 中的 if-else 結構改成 if-elif-else 結構。實現如下邏輯
若是畫筆是綠色的,就打印一條消息,這是綠色。
若是畫筆是黃色的,就打印一條消息,這是黃色。
若是畫筆是紅色的,就打印一條消息,這是紅色。
10-5 人生的不一樣階段:設置變量 age 的值,再編寫一個if-elif-else 結構,根據 age的值判斷處於人生的哪一個階段。
若是一我的的年齡小於 2 歲,就打印一條消息,指出他是嬰兒。
若是一我的的年齡爲 2(含)-4 歲,就打印一條消息,指出他正蹣跚學步。
若是一我的的年齡爲 4(含)-13 歲,就打印一條消息,指出他是兒童。
若是一我的的年齡爲 13(含)-20 歲,就打印一條消息,指出他是青少年。
若是一我的的年齡爲 20(含)-65 歲,就打印一條消息,指出他是成年人。
若是一我的的年齡超過 65(含)歲,就打印一條消息,指出他是老年人。

想查看做業答案能夠去個人Githu倉庫


公衆號

相關文章
相關標籤/搜索