做者 | 弗拉德
來源 | 弗拉德(公衆號:fulade_me)python
假設你有一個汽車列表,並想將其中每輛汽車的名稱打印出來。對於大多數汽車,都應以首字母大寫的方式打印其名稱,但對於汽車名'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語句的核心都是一個值爲True
或False
的表達式,這種表達式被稱爲條件語句。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
嗎?"。大多數編程語言使用等號的方式都與這裏示例的相同。函數
在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時就執行相應的操做。在這些狀況下,關鍵字and
和or
能夠幫助咱們省去不少事情。
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_0
和age_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
是否包含apple
和 orange
。這種判斷頗有用,它能夠幫助咱們可以在建立一個列表後,輕鬆地檢查其中是否包含特定的值。
還有些時候,肯定特定的值未包含在列表中很重要。在這種狀況下,可以使用關鍵字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語句示例,下面更深刻地討論這個主題。
常常須要在條件語句經過了時執行一個操做,並在沒有經過時執行另外一個操做。在這種狀況 下,可以使用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
結構中,老是會執行兩個操做中的一個。
常常須要檢查超過兩個的情形,爲此可以使用Python提供的if-elif-else
結構。Python只執行if-elif-else
結構中的一個代碼塊,它依次檢查每一個條件判斷,直到遇到經過了的條件判斷。判斷經過後,Python將執行緊跟在它後面的代碼,並跳過餘下的判斷。
在現實世界中,不少狀況下須要考慮的情形都超過兩個。例如,來看一個根據年齡段收費的 遊樂場:
若是隻使用一條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
代碼塊,例如,假設前述遊樂場要給老年人打折,可再添加 一個條件判斷,判斷顧客是否符合打折條件。下面假設對於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元。
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
是一條一應俱全的語句,只要不知足任何if
或elif
中的條件判斷,其中的代碼就會執行,這可能會引入無效甚至惡意的數據。若是知道最終要的條件,應考慮使用一個elif
代碼塊來代替else
代碼塊。這樣,你就能夠確定,僅當知足相應的條件時,你的代碼纔會執行。
if-elif-else
結構功能強大,但僅適合用於只有一個條件知足的狀況,遇到經過了的判斷後,Python就跳過餘下的判斷。這種行爲很好,效率很高。
然而,有時候必須檢查你關心的全部條件。在這種狀況下,應使用一系列不包含elif
和else
代碼塊的簡單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語句,而不是elif
或else
語句,所以無論前一個判斷是否經過,都將進行這個判斷。第三個if的代碼檢查顧客是否要了banana
;無論前兩個判斷的結果如何,都會執行這些代碼。每當這個程序運行時,都會進行這三個獨立的判斷。 3
在這個示例中,會檢查每一個條件,所以將在列表中添加pear
和banana
輸出結果:
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
結構中餘下的判斷,再也不檢查列表中是否包含pear
和 banana
。其結果是,將添加顧客要的第一種水果,但不會添加其餘的水果:
Adding pear. Finished adding your fruits!
總之,若是你只想執行一個代碼塊,就使用if-elif-else
結構,若是要運行多個代碼塊,就使用一系列獨立的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倉庫