目錄
5.4 使用 if 語句處理列表
5.4.1 檢查特殊元素
toppings.py
5.4.2 確定列表不是空的
5.4.3 使用多個列表
5.5 設置 if 語句的格式
5.6 小結
第6章
字 典
6.1 一個簡單的字典
alien.py
6.2 使用字典
6.2.1 訪問字典中的值
6.2.2 添加鍵—值對
6.2.3 先創建一個空字典
有時候,在空字典中添加鍵—值對是為了方便,而有時候必須這樣做。為此,可先使用一對 空的花括號定義一個字典,再分行添加各個鍵—值對。例如,下例演示了如何以這種方式創建字 典alien_0:
往期快速傳送門👆(在文章最后):
5.4 使用 if 語句處理列表
通過結合使用if語句和列表,可完成一些有趣的任務:對列表中特定的值做特殊處理;高 效地管理不斷變化的情形,如餐館是否還有特定的食材;證明代碼在各種情形下都將按預期那 樣運行。
5.4.1 檢查特殊元素
本章開頭通過一個簡單示例演示了如何處理特殊值'bmw'——它需要采用不同的格式進行打 印。既然你對條件測試和if語句有了大致的認識,下面來進一步研究如何檢查列表中的特殊值, 并對其做合適的處理。
繼續使用前面的比薩店示例。這家比薩店在制作比薩時,每添加一種配料都打印一條消息。 通過創建一個列表,在其中包含顧客點的配料,并使用一個循環來指出添加到比薩中的配料,可 以以極高的效率編寫這樣的代碼:
toppings.py
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")
輸出很簡單,因為上述代碼不過是一個簡單的for循環:
Adding mushrooms.
Adding green peppers.
Adding extra cheese.
Finished making your pizza!
然而,如果比薩店的青椒用完了,該如何處理呢?為妥善地處理這種情況,可在for循環中 包含一條if語句:
requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
for requested_topping in requested_toppings:
1 if requested_topping == 'green peppers':print("Sorry, we are out of green peppers right now.")
2 else:print("Adding " + requested_topping + ".")
print("\nFinished making your pizza!")
這里在比薩中添加每種配料前都進行檢查。1處的代碼檢查顧客點的是否是青椒,如果是, 就顯示一條消息,指出不能點青椒的原因。2處的else代碼塊確保其他配料都將添加到比薩中。 輸出表明,妥善地處理了顧客點的每種配料:
Adding mushrooms.
Sorry, we are out of green peppers right now.
Adding extra cheese.
Finished making your pizza!
5.4.2 確定列表不是空的
到目前為止,對于處理的每個列表都做了一個簡單的假設,即假設它們都至少包含一個元素。 我們馬上就要讓用戶來提供存儲在列表中的信息,因此不能再假設循環運行時列表不是空的。有 鑒于此,在運行for循環前確定列表是否為空很重要。
下面在制作比薩前檢查顧客點的配料列表是否為空。如果列表是空的,就向顧客確認他是否 要點普通比薩;如果列表不為空,就像前面的示例那樣制作比薩:
1 requested_toppings = []
2 if requested_toppings:for requested_topping in requested_toppings:print("Adding " + requested_topping + ".")print("\nFinished making your pizza!")
3 else:print("Are you sure you want a plain pizza?")
在這里,我們首先創建了一個空列表,其中不包含任何配料(見1)。在2處我們進行了簡 單檢查,而不是直接執行for循環。在if語句中將列表名用在條件表達式中時,Python將在列表 至少包含一個元素時返回True,并在列表為空時返回False。如果requested_toppings不為空,就 運行與前一個示例相同的for循環;否則,就打印一條消息,詢問顧客是否確實要點不加任何配 料的普通比薩(見3)。
在這里,這個列表為空,因此輸出如下——詢問顧客是否確實要點普通比薩:
Are you sure you want a plain pizza?
如果這個列表不為空,將顯示在比薩中添加的各種配料的輸出。
5.4.3 使用多個列表
顧客的要求往往五花八門,在比薩配料方面尤其如此。如果顧客要在比薩中添加炸薯條,該 怎么辦呢?可使用列表和if語句來確定能否滿足顧客的要求。
來看看在制作比薩前如何拒絕怪異的配料要求。下面的示例定義了兩個列表,其中第一個列 表包含比薩店供應的配料,而第二個列表包含顧客點的配料。這次對于requested_toppings中的 每個元素,都檢查它是否是比薩店供應的配料,再決定是否在比薩中添加它:
1 available_toppings = ['mushrooms', 'olives', 'green peppers','pepperoni', 'pineapple', 'extra cheese']
2 requested_toppings = ['mushrooms', 'french fries', 'extra cheese']
3 for requested_topping in requested_toppings:
4 if requested_topping in available_toppings:print("Adding " + requested_topping + ".")
5 else:print("Sorry, we don't have " + requested_topping + ".")
print("\nFinished making your pizza!")
在1處,我們定義了一個列表,其中包含比薩店供應的配料。請注意,如果比薩店供應的配 料是固定的,也可使用一個元組來存儲它們。在2處,我們又創建了一個列表,其中包含顧客點 的配料,請注意那個不同尋常的配料——'french fries'。在3處,我們遍歷顧客點的配料列表。 在這個循環中,對于顧客點的每種配料,我們都檢查它是否包含在供應的配料列表中(見4); 如果答案是肯定的,就將其加入到比薩中,否則將運行else代碼塊(見5):打印一條消息,告 訴顧客不供應這種配料。
這些代碼的輸出整潔而詳實:
Adding mushrooms.
Sorry, we don't have french fries.
Adding extra cheese.
Finished making your pizza!
通過為數不多的幾行代碼,我們高效地處理了一種真實的情形!
5.5 設置 if 語句的格式
本章的每個示例都展示了良好的格式設置習慣。在條件測試的格式設置方面,PEP 8提供的唯一 建議是,在諸如==、>=和<=等比較運算符兩邊各添加一個空格,例如,if age < 4:要比if age<4:好。 這樣的空格不會影響Python對代碼的解讀,而只是讓代碼閱讀起來更容易。
5.6 小結
在本章中,你學習了如何編寫結果要么為Ture要么為False的條件測試。你學習了如何編寫 簡單的if語句、if-else語句和if-elif-else結構。在程序中,你使用了這些結構來測試特定的條 件,以確定這些條件是否滿足。你學習了如何在利用高效的for循環的同時,以不同于其他元素 的方式對特定的列表元素進行處理。你還再次學習了Python就代碼格式方面提出的建議,這可確 保即便你編寫的程序越來越復雜,其代碼依然易于閱讀和理解。
在第6章,你將學習Python字典。字典類似于列表,但讓你能夠將不同的信息關聯起來。你 將學習如何創建和遍歷字典,以及如何將字典同列表和if語句結合起來使用。學習字典讓你能夠 模擬更多現實世界的情形。
第6章
字 典
6.1 一個簡單的字典
來看一個游戲,其中包含一些外星人,這些外星人的顏色和點數各不相同。下面是一個簡單 的字典,存儲了有關特定外星人的信息:
alien.py
alien_0 = {'color': 'green', 'points': 5}
print(alien_0['color'])
print(alien_0['points'])
字典alien_0存儲了外星人的顏色和點數。使用兩條print語句來訪問并打印這些信息,如 下所示:
green
5
與大多數編程概念一樣,要熟練使用字典,也需要一段時間的練習。使用字典一段時間后, 你就會明白為何它們能夠高效地模擬現實世界中的情形。
6.2 使用字典
在Python中,字典是一系列鍵—值對。每個鍵都與一個值相關聯,你可以使用鍵來訪問與之 相關聯的值。與鍵相關聯的值可以是數字、字符串、列表乃至字典。事實上,可將任何Python對 象用作字典中的值。
在Python中,字典用放在花括號{}中的一系列鍵—值對表示,如前面的示例所示:
alien_0 = {'color': 'green', 'points': 5}
鍵—值對是兩個相關聯的值。指定鍵時,Python將返回與之相關聯的值。鍵和值之間用冒號 分隔,而鍵—值對之間用逗號分隔。在字典中,你想存儲多少個鍵—值對都可以。
最簡單的字典只有一個鍵—值對,如下述修改后的字典alien_0所示:
alien_0 = {'color': 'green'}
這個字典只存儲了一項有關alien_0的信息,具體地說是這個外星人的顏色。在這個字典中, 字符串'color'是一個鍵,與之相關聯的值為'green'。
6.2.1 訪問字典中的值
要獲取與鍵相關聯的值,可依次指定字典名和放在方括號內的鍵,如下所示:
alien_0 = {'color': 'green'}
print(alien_0['color'])
這將返回字典alien_0中與鍵'color'相關聯的值:
green
字典中可包含任意數量的鍵—值對。例如,下面是最初的字典alien_0,其中包含兩個鍵— 值對:
alien_0 = {'color': 'green', 'points': 5}
現在,你可以訪問外星人alien_0的顏色和點數。如果玩家射殺了這個外星人,你就可以使 用下面的代碼來確定玩家應獲得多少個點:
alien_0 = {'color': 'green', 'points': 5}
1 new_points = alien_0['points']
2 print("You just earned " + str(new_points) + " points!")
上述代碼首先定義了一個字典,然后從這個字典中獲取與鍵'points'相關聯的值(見1), 并將這個值存儲在變量new_points中。接下來,將這個整數轉換為字符串,并打印一條消息,指出玩家獲得了多少個點(見2):
You just earned 5 points
如果你在有外星人被射殺時都運行這段代碼,就會獲取該外星人的點數。
6.2.2 添加鍵—值對
字典是一種動態結構,可隨時在其中添加鍵—值對。要添加鍵—值對,可依次指定字典名、用 方括號括起的鍵和相關聯的值。
下面在字典alien_0中添加兩項信息:外星人的x坐標和y坐標,讓我們能夠在屏幕的特定位 置顯示該外星人。我們將這個外星人放在屏幕左邊緣,且離屏幕上邊緣25像素的地方。由于屏幕 坐標系的原點通常為左上角,因此要將該外星人放在屏幕左邊緣,可將x坐標設置為0;要將該外 星人放在離屏幕頂部25像素的地方,可將y坐標設置為25,如下所示:
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
1 alien_0['x_position'] = 0
2 alien_0['y_position'] = 25
print(alien_0)
我們首先定義了前面一直在使用的字典,然后打印這個字典,以顯示其信息快照。在?處, 我們在這個字典中新增了一個鍵—值對,其中的鍵為'x_position',而值為0。在?處,我們重 復這樣的操作,但使用的鍵為'y_position'。打印修改后的字典時,將看到這兩個新增的鍵— 值對:
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}
這個字典的最終版本包含四個鍵—值對,其中原來的兩個指定外星人的顏色和點數,而新增 的兩個指定位置。注意,鍵—值對的排列順序與添加順序不同。Python不關心鍵—值對的添加順序, 而只關心鍵和值之間的關聯關系。
6.2.3 先創建一個空字典
有時候,在空字典中添加鍵—值對是為了方便,而有時候必須這樣做。為此,可先使用一對 空的花括號定義一個字典,再分行添加各個鍵—值對。例如,下例演示了如何以這種方式創建字 典alien_0:
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)
這里首先定義了空字典alien_0,再在其中添加顏色和點數,得到前述示例一直在使用的 字典:
{'color': 'green', 'points': 5}
使用字典來存儲用戶提供的數據或在編寫能自動生成大量鍵—值對的代碼時,通常都需要先 定義一個空字典。
Python:核心知識點整理大全1-筆記-CSDN博客
Python:核心知識點整理大全2-筆記-CSDN博客
Python:核心知識點整理大全3-筆記-CSDN博客
Python:核心知識點整理大全4-筆記-CSDN博客
Python:核心知識點整理大全5-筆記-CSDN博客
Python:核心知識點整理大全6-筆記-CSDN博客
Python:核心知識點整理大全7-筆記-CSDN博客
Python:核心知識點整理大全8-筆記-CSDN博客
Python:核心知識點整理大全9-筆記-CSDN博客