if 語句 原
## if語句
# 5.1 一個簡單示例
cars =['audi','bmw','subaru','toyota']
for car in cars:
if car=='bmw':
print(car.upper()) #演示瞭如何使用if 語句來正確地處理特殊情形。假設你有一個汽車列表,並想將其中每輛汽車的名稱打印出來。對於大多數汽車,都應以首字母大寫的
else: # 方式打印其名稱,但對於汽車名'bmw' ,應以全大寫的方式打印。下面的代碼遍歷一個列表,並以首字母大寫的方式打印其中的汽車名,但對於汽車名'bmw' ,以全大寫的方
print(car.title()) # 式打印
# 5.2 條件測試
## 每條if 語句的核心都是一個值爲True 或False 的表達式,這種表達式被稱爲條件測試 。Python根據條件測試的值爲True 還是False 來決定是否執行if 語句中的代碼。如果
## 條件測試的值爲True ,Python就執行緊跟在if 語句後面的代碼;如果爲False ,Python就忽略這些代碼。
# 5.2.1 檢查是否相等
# 大多數條件測試都將一個變量的當前值同特定值進行比較。最簡單的條件測試檢查變量的值是否與特定值相等:
car = 'bmw' # 首先使用一個等號將car 的值設置爲'bmw'
car == 'bmw' # 使用兩個等號(== )檢查car 的值是否爲'bmw'
# 5.2.2 檢查是否相等時不考慮大小寫
car = 'Audi'
car == 'audi' # Python中檢查是否相等時區分大小寫,例如,兩個大小寫不同的值會被視爲不相等:
car = 'Audi'
car.lower() == 'audi' # 函數lower() 不會修改存儲在變量car 中的值,將變量的值轉換爲小寫,再進行比較
# 5.2.3 檢查是否不相等
requested_topping = 'mushrooms'
if requested_topping != 'anchovies': # 將requested_topping 的值與'anchovies' 進行比較,如果它們不相等,Python將返回True ,進而執行緊跟在if 語句後面的代碼;如果這兩個值相
print("Hold the anchovies!") # 等,Python將返回False ,因此不執行緊跟在if 語句後面的代碼。
# 5.2.4 比較數字
age = 18
age == 18 # 檢查一個人是否是18歲
# 條件語句中可包含各種數學比較,如小於、小於等於、大於、大於等於:
age = 19
age < 21
True
age <= 21
True
age > 21
False
age >= 21
False
# 5.2.5 檢查多個條件
# 你可能想同時檢查多個條件,例如,有時候你需要在兩個條件都爲True 時才執行相應的操作,而有時候你只要求一個條件爲True 時就執行相應的操作。在這些情況下,關鍵
# 字and 和or 可助你一臂之力。
# 1 and
age_0 =22
age_1=18
age_0 >=21 and age_1>=21
age1 =22
age_0 >=21 and age1>=21
# 2 or
# 關鍵字or 也能夠讓你檢查多個條件,但只要至少有一個條件滿足,就能通過整個測試。僅當兩個測試都沒有通過時,使用or 的表達式才爲False 。
age_0 =22
age_1 =18
age_0 >= 21 or age_1 >=21
# 5.2.6 檢查特定值是否包含在列表中
# 有時候,執行操作前必須檢查列表是否包含特定的值。例如,結束用戶的註冊過程前,可能需要檢查他提供的用戶名是否已包含在用戶名列表中。在地圖程序中,可能需要檢查
# 用戶提交的位置是否包含在已知位置列表中。
# 要判斷特定的值是否已包含在列表中,可使用關鍵字in 。來看你可能爲比薩店編寫的一些代碼;這些代碼首先創建一個列表,其中包含用戶點的比薩配料,然後檢查特定的配料
# 是否包含在該列表中。
>>> requested_toppings = ['mushrooms', 'onions', 'pineapple']
❶ >>> 'mushrooms' in requested_toppings # 讓Python檢查列表requested_toppings 是否包含'mushrooms' 和'pepperoni'
True
❷ >>> 'pepperoni' in requested_toppings
False
# 5.2.7 檢查特定值是否不包含在列表中
# 還有些時候,確定特定的值未包含在列表中很重要;在這種情況下,可使用關鍵字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.")
# 5.2.8 布爾表達式
# 隨着你對編程的瞭解越來越深入,將遇到術語布爾表達式 ,它不過是條件測試的別名。與條件表達式一樣,布爾表達式的結果要麼爲True ,要麼爲False
# 5.3 if語句
# 最簡單的if 語句只有一個測試和一個操作:
age =19
if age >=18:
print('you are old enough to vote!') # 在if 語句中,縮進的作用與for 循環中相同。如果測試通過了,將執行if 語句後面所有縮進的代碼行,否則將忽略它們。
# if -else 語句
# 經常需要在條件測試通過了時執行一個操作,並在沒有通過時執行另一個操作;在這種情況下,可使用Python提供的if-else 語句。if-else 語句塊類似於簡單的if 語句,但
# 其中的else 語句讓你能夠指定條件測試未通過時要執行的操作。
age =17
if age >=18:
print('you are old enough to vote!') # 如果❶處的條件測試通過了,就執行第一個縮進的print 語句塊;如果測試結果爲False ,就執行❷處的else 代碼塊。這次age 小於18,條件測試未通過,因此執行else 代
else: # 碼塊中的代碼:
print("sorry,you are too young to vote")
# 5.3.3 if-eilf-else結構
# 經常需要檢查超過兩個的情形,爲此可使用Python提供的if-elif-else 結構。Python只執行if-elif-else 結構中的一個代碼塊,它依次檢查每個條件測試,直到遇到通過
# 了的條件測試。測試通過後,Python將執行緊跟在它後面的代碼,並跳過餘下的測試。
age =4
if age <=4:
print('不收費')
elif age <=18:
print("收費5元")
else:
print('收費10元')
# 代碼簡潔
age =77
if age <=4:
price=0
elif age <=18:
price=5
else:
price=10
print("收費"+str(price)+'元')
# 5.3.4 使用多個elif代碼塊
# 可根據需要使用任意數量的elif 代碼塊,例如,假設前述遊樂場要給老年人打折,可再添加一個條件測試,判斷顧客是否符合打折條件。下面假設對於65歲(含)以上的老
# 人,可以半價(即5美元)購買門票:
age =77
if age <=4:
price=0
elif age <=18:
price=5
elif age>65:
price =5
else:
price=10
print("收費"+str(price)+'元')
# 這些代碼大都未變。第二個elif 代碼塊(見❶)通過檢查確定年齡不到65歲後,纔將門票價格設置爲全票價格——10美元。請注意,在else 代碼塊(見❷)中,必須將所賦的
# 值改爲5,因爲僅當年齡超過65(含)時,纔會執行這個代碼塊。
# 5.3.5 省略else代碼塊
# Python並不要求if-elif 結構後面必須有else 代碼塊。在有些情況下,else 代碼塊很有用;而在其他一些情況下,使用一條elif 語句來處理特定的情形更清晰:
age =19
if age <=4:
price=0
elif age <=18:
price=5
elif age>=65:
price =5
elif age<65:
price = 10
print("收費"+str(price)+'元')
# else 是一條包羅萬象的語句,只要不滿足任何if 或elif 中的條件測試,其中的代碼就會執行,這可能會引入無效甚至惡意的數據。如果知道最終要測試的條件,應考慮使用
# 一個elif 代碼塊來代替else 代碼塊。這樣,你就可以肯定,僅當滿足相應的條件時,你的代碼纔會執行。
# 5.3.6 測試多個條件
# if-elif-else 結構功能強大,但僅適合用於只有一個條件滿足的情況:遇到通過了的測試後,Python就跳過餘下的測試。這種行爲很好,效率很高,讓你能夠測試一個特定的
# 條件。
# 然而,有時候必須檢查你關心的所有條件。在這種情況下,應使用一系列不包含elif 和else 代碼塊的簡單if 語句。在可能有多個條件爲True ,且你需要在每個條件爲True
# 時都採取相應措施時,適合使用這種方法。
# 下面再來看前面的比薩店示例。如果顧客點了兩種配料,就需要確保在其比薩中包含這些配料:
requested_toppings = ['mushrooms', 'extra cheese']
if 'mushrooms' in requested_toppings:
print("Adding mushrooms.")
if 'pepperoni' in requested_toppings:
print("Adding pepperoni.")
if 'extra cheese' in requested_toppings:
print("Adding extra cheese.")
print("\nFinished 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' 。其結果是,將添加顧客點的第一種配料,但不會添加其他的配料:
# 總之,如果你只想執行一個代碼塊,就使用if-elif-else 結構;如果要運行多個代碼塊,就使用一系列獨立的if 語句。
# 5.4使用if語句處理列表
# 通過結合使用if 語句和列表,可完成一些有趣的任務:對列表中特定的值做特殊處理;高效地管理不斷變化的情形,如餐館是否還有特定的食材;證明代碼在各種情形下都將按
# 預期那樣運行。
# 5.4.1 檢查特殊元素
requested_toppings=['mushrooms','green peppers','extra cheese']
for requested_topping in requested_toppings:
if requested_topping=='green peppers': # 這裏在比薩中添加每種配料前都進行檢查。❶處的代碼檢查顧客點的是否是青椒,如果是,就顯示一條消息,指出不能點青椒的原因。❷處的else 代碼塊確保其他配料都將添
print('sorry') # 加到比薩中。
else:
print(requested_topping)
# 5.4.2 確定列表不是空的
# 對於處理的每個列表都做了一個簡單的假設,即假設它們都至少包含一個元素。我們馬上就要讓用戶來提供存儲在列表中的信息,因此不能再假設循環運行時列表
# 不是空的。有鑑於此,在運行for 循環前確定列表是否爲空很重要。
requested_toppings =[]
if requested_toppings: # 在❷處我們進行了簡單檢查,而不是直接執行for 循環。在if 語句中將列表名用在條件表達式中
print('sorry') # 時,Python將在列表至少包含一個元素時返回True ,並在列表爲空時返回False 。如果requested_toppings 不爲空,就運行與前一個示例相同的for 循環;
else:
print('pizza')
# 5.4.3 使用多個列表
available_toppongs=['mushrooms','olives','green peppers','pepperoni','pineapple','extra cheese'] # 我們定義了一個列表,其中包含比薩店供應的配料
requested_toppings=['mushrooms','green peppers','extra cheese'] #創建了一個列表,其中包含顧客點的配料,請注意那個不同尋常的配料——'french fries'
for requested_topping in requested_toppings: # 我們遍歷顧客點的配料列表。在這個循環中,對於顧客點的每種配料,我們都檢查它是否包
if requested_topping in available_toppongs: #含在供應的配料列表中(見❹)
print('adding '+requested_topping) # 如果答案是肯定的,就將其加入到比薩中,否則將運行else 代碼塊(見❺):打印一條消息,告訴顧客不供應這種配料。
else:
print('sorry')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.