檔案內容替換指令碼
技術標籤:Pythonpython3python if語句python教程python基礎python簡單
作者 | 弗拉德
來源 | 弗拉德(公眾號:fulade_me)
if 簡單示例
假設你有一個汽車列表,並想將其中每輛汽車的名稱打印出來。對於大多數汽車,都應以首字母大寫的方式列印其名稱,但對於汽車名’bmw’,應以全大寫的方式列印。
下面的程式碼遍歷一個列表,並以首字母大寫的方式列印其中的汽車名,但對於汽車名’bmw’,以全大寫的方式列印:
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
就以首字母大寫的方式輸出。
輸出結果如下:
BMW
Audi
Toyota
Honda
條件語句
每條if語句的核心都是一個值為True
或False
的表示式,這種表示式被稱為條件語句。Python根據條件判斷的值為True
還是False
來決定是否執行if語句中的程式碼。如果條件判斷的值為True
, Python就執行緊跟在if語句後面的程式碼;如果為False
檢查是否相等
大多數條件判斷都將一個變數的當前值同特定值進行比較。最簡單的條件判斷檢查變數的值是否與某個值相等:
car = 'bmw'
print(car == 'bmw')
True
我們首先使用一個等號將car的值設定為bmw
。接下來,使用兩個等號==
檢查car
的值是否為bmw
。這個相等運算子在它兩邊的值相等時返回True
,否則返回False
。在這個示例中,兩邊的值相等,因此返回True
。
如果變數car
的值不是bmw
,上述判斷將返回False
:
car = 'audi'
print(car == 'bmw')
False
一個第一個等號將將變數car的值設定為audi
bmw
嗎?"。大多數程式語言使用等號的方式都與這裡示例的相同。
使用if時不考慮大小寫
在Python中檢查是否相等時區分大小寫,例如,兩個大小寫不同的值會被視為不相等:
car = 'Audi'
print(car == 'audi')
False
如果大小寫很重要,這種行為有其優點。但如果大小寫無關緊要,而只想檢查變數的值,可將變數的值轉換為小寫,再進行比較:
car = 'Audi'
print(car.lower() == 'audi')
True
無論值Audi
的大小寫如何,上述判斷都將返回True
,因為該判斷不區分大小寫。函式lower()
不會修改儲存在變數car
中的值,因此進行這樣的比較時不會影響原來的變數:
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語句了。前面討論條件語句時,列舉了多個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將執行緊跟在它後面的程式碼,並跳過餘下的判斷。
在現實世界中,很多情況下需要考慮的情形都超過兩個。例如,來看一個根據年齡段收費的 遊樂場:
- 4歲以下免費;
- 4-18歲收費5元;
- 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
是一條包羅永珍的語句,只要不滿足任何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語句處理列表
通過結合使用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倉庫