目錄
?編輯
5.2.4 比較數字
5.2.5 檢查多個條件
1. 使用and檢查多個條件
2. 使用or檢查多個條件
5.2.6 檢查特定值是否包含在列表中
5.2.7 檢查特定值是否不包含在列表中
banned_users.py
5.2.8 布爾表達式
5.3 if 語句
5.3.1 簡單的 if 語句
5.3.2 if-else 語句
5.3.3 if-elif-else 結構
5.3.4 使用多個 elif 代碼塊
5.3.5 省略 else 代碼塊
5.3.6 測試多個條件
5.2.4 比較數字
檢查數值非常簡單,例如,下面的代碼檢查一個人是否是18歲:
>>> age = 18
>>> age == 18
True
你還可以檢查兩個數字是否不等,例如,下面的代碼在提供的答案不正確時打印一條消息: magic_ number.py
answer = 17
1 if answer != 42:print("That is not the correct answer. Please try again!")
answer(17)不是42,1處的條件得到滿足,因此縮進的代碼塊得以執行:
That is not the correct answer. Please try again!
條件語句中可包含各種數學比較,如小于、小于等于、大于、大于等于
>>> age = 19
>>> age < 21
True
>>> age <= 21
True
>>> age > 21
False
>>> age >= 21
False
在if語句中可使用各種數學比較,這讓你能夠直接檢查關心的條件。
5.2.5 檢查多個條件
你可能想同時檢查多個條件,例如,有時候你需要在兩個條件都為True時才執行相應的操作, 而有時候你只要求一個條件為True時就執行相應的操作。在這些情況下,關鍵字and和or可助你 一臂之力。
1. 使用and檢查多個條件
要檢查是否兩個條件都為True,可使用關鍵字and將兩個條件測試合而為一;如果每個測試都通過了,整個表達式就為True;如果至少有一個測試沒有通過,整個表達式就為False。 例如,要檢查是否兩個人都不小于21歲,可使用下面的測試:
1 >>> age_0 = 22
>>> age_1 = 18
2 >>> age_0 >= 21 and age_1 >= 21
False
3 >>> age_1 = 22
>>> age_0 >= 21 and age_1 >= 21
True
在1處,我們定義了兩個用于存儲年齡的變量:age_0和age_1。在2處,我們檢查這兩個變 量是否都大于或等于21;左邊的測試通過了,但右邊的測試沒有通過,因此整個條件表達式的結 果為False。在3處,我們將age_1改為22,這樣age_1的值大于21,因此兩個測試都通過了,導致 整個條件表達式的結果為True。
為改善可讀性,可將每個測試都分別放在一對括
號內,但并非必須這樣做。如果你使用括號, 測試將類似于下面這樣:
(age_0 >= 21) and (age_1 >= 21)
2. 使用or檢查多個條件
關鍵字or也能夠讓你檢查多個條件,但只要至少有一個條件滿足,就能通過整個測試。僅當 兩個測試都沒有通過時,使用or的表達式才為False。
下面再次檢查兩個人的年齡,但檢查的條件是至少有一個人的年齡不小于21歲:
?
1 >>> age_0 = 22
>>> age_1 = 18
2 >>> age_0 >= 21 or age_1 >= 21
True
3 >>> age_0 = 18
>>> age_0 >= 21 or age_1 >= 21
False ?
同樣,我們首先定義了兩個用于存儲年齡的變量(見1)。由于2處對age_0的測試通過了, 因此整個表達式的結果為True。接下來,我們將age_0減小為18;在3處的測試中,兩個測試都沒 有通過,因此整個表達式的結果為False。
5.2.6 檢查特定值是否包含在列表中
有時候,執行操作前必須檢查列表是否包含特定的值。例如,結束用戶的注冊過程前,可能 需要檢查他提供的用戶名是否已包含在用戶名列表中。在地圖程序中,可能需要檢查用戶提交的 位置是否包含在已知位置列表中。
要判斷特定的值是否已包含在列表中,可使用關鍵字in。來看你可能為比薩店編寫的一些代 碼;這些代碼首先創建一個列表,其中包含用戶點的比薩配料,然后檢查特定的配料是否包含在該列表中。
>>> requested_toppings = ['mushrooms', 'onions', 'pineapple']
1 >>> 'mushrooms' in requested_toppingsTrue
2 >>> 'pepperoni' in requested_toppings
False
在1處和2處,關鍵字in讓Python檢查列表requested_toppings是否包含'mushrooms'和 'pepperoni'。這種技術很有用,它讓你能夠在創建一個列表后,輕松地檢查其中是否包含特定 的值。
5.2.7 檢查特定值是否不包含在列表中
還有些時候,確定特定的值未包含在列表中很重要;在這種情況下,可使用關鍵字not in。 例如,如果有一個列表,其中包含被禁止在論壇上發表評論的用戶,就可在允許用戶提交評論前 檢查他是否被禁言:
banned_users.py
banned_users = ['andrew', 'carolina', 'david']
user = 'marie'
1 if user not in banned_users:print(user.title() + ", you can post a response if you wish.")
1 處的代碼行明白易懂:如果user的值未包含在列表banned_users中,Python將返回True, 進而執行縮進的代碼行。 用戶'marie'未包含在列表banned_users中,因此她將看到一條邀請她發表評論的消息:
Marie, you can post a response if you wish.
5.2.8 布爾表達式
隨著你對編程的了解越來越深入,將遇到術語布爾表達式,它不過是條件測試的別名。與條 件表達式一樣,布爾表達式的結果要么為True,要么為False。
布爾值通常用于記錄條件,如游戲是否正在運行,或用戶是否可以編輯網站的特定內容:
game_active = True
can_edit = False
在跟蹤程序狀態或程序中重要的條件方面,布爾值提供了一種高效的方式。
5.3 if 語句
理解條件測試后,就可以開始編寫if語句了。if語句有很多種,選擇使用哪種取決于要測試 的條件數。前面討論條件測試時,列舉了多個if語句示例,下面更深入地討論這個主題。
5.3.1 簡單的 if 語句
最簡單的if語句只有一個測試和一個操作:
if conditional_test:do something
在第1行中,可包含任何條件測試,而在緊跟在測試后面的縮進代碼塊中,可執行任何操作。 如果條件測試的結果為True,Python就會執行緊跟在if語句后面的代碼;否則Python將忽略這些 代碼。
假設有一個表示某人年齡的變量,而你想知道這個人是否夠投票的年齡,可使用如下代碼: voting.py
age = 19
1 if age >= 18:
2 print("You are old enough to vote!")
在1處,Python檢查變量age的值是否大于或等于18;答案是肯定的,因此Python執行?處縮 進的print語句:
You are old enough to vote!
在if語句中,縮進的作用與for循環中相同。如果測試通過了,將執行if語句后面所有縮進 的代碼行,否則將忽略它們。
在緊跟在if語句后面的代碼塊中,可根據需要包含任意數量的代碼行。下面在一個人夠投票 的年齡時再打印一行輸出,問他是否登記了:
age = 19
if age >= 18:print("You are old enough to vote!")print("Have you registered to vote yet?")
條件測試通過了,而兩條print語句都縮進了,因此它們都將執行:
You are old enough to vote!
Have you registered to vote yet?
如果age的值小于18,這個程序將不會有任何輸出。
5.3.2 if-else 語句
經常需要在條件測試通過了時執行一個操作,并在沒有通過時執行另一個操作;在這種情況 下,可使用Python提供的if-else語句。if-else語句塊類似于簡單的if語句,但其中的else語句 讓你能夠指定條件測試未通過時要執行的操作。
下面的代碼在一個人夠投票的年齡時顯示與前面相同的消息,同時在這個人不夠投票的年齡 時也顯示一條消息:
age = 17
1 if age >= 18:print("You are old enough to vote!")print("Have you registered to vote yet?")
2 else:print("Sorry, you are too young to vote.")print("Please register to vote as soon as you turn 18!")
如果1處的條件測試通過了,就執行第一個縮進的print語句塊;如果測試結果為False,就 執行2處的else代碼塊。這次age小于18,條件測試未通過,因此執行else代碼塊中的代碼:
Sorry, you are too young to vote.
Please register to vote as soon as you turn 18!
上述代碼之所以可行,是因為只存在兩種情形:要么夠投票的年齡,要么不夠。if-else結 構非常適合用于要讓Python執行兩種操作之一的情形。在這種簡單的if-else結構中,總是會執行 兩個操作中的一個。
5.3.3 if-elif-else 結構
經常需要檢查超過兩個的情形,為此可使用Python提供的if-elif-else結構。Python只執行 if-elif-else結構中的一個代碼塊,它依次檢查每個條件測試,直到遇到通過了的條件測試。測 試通過后,Python將執行緊跟在它后面的代碼,并跳過余下的測試。
在現實世界中,很多情況下需要考慮的情形都超過兩個。例如,來看一個根據年齡段收費的 游樂場:
? 4歲以下免費;
? 4~18歲收費5美元;
? 18歲(含)以上收費10美元。
如果只使用一條if語句,如何確定門票價格呢?下面的代碼確定一個人所屬的年齡段,并打 印一條包含門票價格的消息:
amusement_park.py
age = 12
1 if age < 4:print("Your admission cost is $0.")
2 elif age < 18:print("Your admission cost is $5.")
3 else:print("Your admission cost is $10.")
1 處的if測試檢查一個人是否不滿4歲,如果是這樣,Python就打印一條合適的消息,并跳 過余下的測試。2 處的elif代碼行其實是另一個if測試,它僅在前面的測試未通過時才會運行。 在這里,我們知道這個人不小于4歲,因為第一個測試未通過。如果這個人未滿18歲,Python將 打印相應的消息,并跳過else代碼塊。如果if測試和elif測試都未通過,Python將運行3 處else 代碼塊中的代碼。? ?
在這個示例中,1處測試的結果為False,因此不執行其代碼塊。然而,第二個測試的結果 為True(12小于18),因此將執行其代碼塊。輸出為一個句子,向用戶指出了門票價格:
只要年齡超過17歲,前兩個測試就都不能通過。在這種情況下,將執行else代碼塊,指出門 票價格為10美元。
為讓代碼更簡潔,可不在if-elif-else代碼塊中打印門票價格,而只在其中設置門票價格, 并在它后面添加一條簡單的print語句:
age = 12
if age < 4:
1 price = 0
elif age < 18:
2 price = 5
else:
3 price = 10
4 print("Your admission cost is $" + str(price) + ".")
1 處、2 處和3 處的代碼行像前一個示例那樣,根據人的年齡設置變量price的值。在 if-elif-else結構中設置price的值后,一條未縮進的print語句4 會根據這個變量的值打印一條 消息,指出門票的價格。
這些代碼的輸出與前一個示例相同,但if-elif-else結構的作用更小,它只確定門票價格, 而不是在確定門票價格的同時打印一條消息。除效率更高外,這些修訂后的代碼還更容易修改: 要調整輸出消息的內容,只需修改一條而不是三條print語句。
5.3.4 使用多個 elif 代碼塊
可根據需要使用任意數量的elif代碼塊,例如,假設前述游樂場要給老年人打折,可再添加 一個條件測試,判斷顧客是否符合打折條件。下面假設對于65歲(含)以上的老人,可以半價(即 5美元)購買門票:
age = 12
if age < 4:price = 0
elif age < 18:price = 5
1 elif age < 65:price = 10
2 else:price = 5
print("Your admission cost is $" + str(price) + ".")
這些代碼大都未變。第二個elif代碼塊(見1)通過檢查確定年齡不到65歲后,才將門票價 格設置為全票價格——10美元。請注意,在else代碼塊(見2)中,必須將所賦的值改為5,因 為僅當年齡超過65(含)時,才會執行這個代碼塊。
5.3.5 省略 else 代碼塊
Python并不要求if-elif結構后面必須有else代碼塊。在有些情況下,else代碼塊很有用;而 在其他一些情況下,使用一條elif語句來處理特定的情形更清晰:
age = 12
if age < 4:price = 0
elif age < 18:price = 5
elif age < 65:price = 10
1 elif age >= 65:price = 5
print("Your admission cost is $" + str(price) + ".")
1 處的elif代碼塊在顧客的年齡超過65(含)時,將價格設置為5美元,這比使用else代碼 塊更清晰些。經過這樣的修改后,每個代碼塊都僅在通過了相應的測試時才會執行。 else是一條包羅萬象的語句,只要不滿足任何if或elif中的條件測試,其中的代碼就會執行, 這可能會引入無效甚至惡意的數據。如果知道最終要測試的條件,應考慮使用一個elif代碼塊來 代替else代碼塊。這樣,你就可以肯定,僅當滿足相應的條件時,你的代碼才會執行。
5.3.6 測試多個條件
????????if-elif-else結構功能強大,但僅適合用于只有一個條件滿足的情況:遇到通過了的測試后, Python就跳過余下的測試。這種行為很好,效率很高,讓你能夠測試一個特定的條件。
????????然而,有時候必須檢查你關心的所有條件。在這種情況下,應使用一系列不包含elif和else 代碼塊的簡單if語句。在可能有多個條件為True,且你需要在每個條件為True時都采取相應措施 時,適合使用這種方法。
下面再來看前面的比薩店示例。如果顧客點了兩種配料,就需要確保在其比薩中包含這些配料: toppings.py
1 requested_toppings = ['mushrooms', 'extra cheese']
2 if 'mushrooms' in requested_toppings:print("Adding mushrooms.")
3 if 'pepperoni' in requested_toppings:print("Adding pepperoni.")
4 if 'extra cheese' in requested_toppings:print("Adding extra cheese.")
print("\nFinished making your pizza!")
我們首先創建了一個列表,其中包含顧客點的配料(見1)。2 處的if語句檢查顧客是否點 了配料蘑菇('mushrooms'),如果點了,就打印一條確認消息。3 處檢查配料辣香腸('pepperoni') 的代碼也是一個簡單的if語句,而不是elif或else語句;因此不管前一個測試是否通過,都將進 行這個測試。4處的代碼檢查顧客是否要求多加芝士('extra cheese');不管前兩個測試的結果 如何,都會執行這些代碼。每當這個程序運行時,都會進行這三個獨立的測試。
在這個示例中,會檢查每個條件,因此將在比薩中添加蘑菇并多加芝士:
Adding mushrooms.
Adding extra cheese.
Finished making your pizza!
如果像下面這樣轉而使用if-elif-else結構,代碼將不能正確地運行,因為有一個測試通過 后,就會跳過余下的測試:
requested_toppings = ['mushrooms', 'extra cheese']
if 'mushrooms' in requested_toppings:print("Adding mushrooms.")
elif 'pepperoni' in requested_toppings:print("Adding pepperoni.")
elif 'extra cheese' in requested_toppings:print("Adding extra cheese.")
print("\nFinished making your pizza!")
第一個測試檢查列表中是否包含'mushrooms',它通過了,因此將在比薩中添加蘑菇。然而, Python將跳過if-elif-else結構中余下的測試,不再檢查列表中是否包含'extra cheese'和 'pepperoni'。其結果是,將添加顧客點的第一種配料,但不會添加其他的配料:
Adding mushrooms.
Finished making your pizza!
總之,如果你只想執行一個代碼塊,就使用if-elif-else結構;如果要運行多個代碼塊,就 使用一系列獨立的if語句。
Python:核心知識點整理大全1-筆記-CSDN博客
Python:核心知識點整理大全2-筆記-CSDN博客
Python:核心知識點整理大全3-筆記-CSDN博客
Python:核心知識點整理大全4-筆記-CSDN博客
Python:核心知識點整理大全5-筆記-CSDN博客
Python:核心知識點整理大全6-筆記-CSDN博客
Python:核心知識點整理大全7-筆記-CSDN博客
Python:核心知識點整理大全8-筆記-CSDN博客