1. 程式人生 > 其它 >檔案內容替換指令碼

檔案內容替換指令碼

技術標籤: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語句的核心都是一個值為TrueFalse的表示式,這種表示式被稱為條件語句。Python根據條件判斷的值為True還是False來決定是否執行if語句中的程式碼。如果條件判斷的值為True, Python就執行緊跟在if語句後面的程式碼;如果為False

,Python就不會執行這些程式碼。

檢查是否相等

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

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中檢查是否相等時區分大小寫,例如,兩個大小寫不同的值會被視為不相等:

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時就執行相應的操作。在這些情況下,關鍵字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倉庫


公眾號