嗨,各位程式碼冒險家!前一天我們深入探討了 Function (函式),它幫助我們將程式碼模組化、提高可重用性,為複雜的遊戲邏輯打下了堅實的基礎。今天,我們要介紹一個同樣強大且用途廣泛的資料型態:Dictionary (字典)。想像一下我們在學生時期常用的國語字典,每個詞條都包含一個文字本身和其對應的字義。Python 的字典也類似,它能讓我們以一種系統化且易於查詢的方式儲存資訊,這對於我們的《奇幻卡牌競技場》這樣需要儲存大量角色、卡牌或物品屬性資料的遊戲專案來說,是不可或缺的工具。
Python 零基礎新手入門 #08 Dictionaries (字典):
https://www.youtube.com/watch?v=2uhs3TOmb64&list=TLGGIPyyn50l2DwxMTA5MjAyNQ
Python 字典的核心概念是**「鍵值對」(Key-Value Pair)**。字典中的每個元素都由一個獨特的 Key (鍵) 和其對應的 Value (值) 所組成,這兩者合稱為一個 Item (項目)。Key 必須是獨一無二的,就像傳統字典中不會有重複的詞條一樣。
# 範例:儲存手機規格的字典
手機規格 = {
"廠牌": "蘋果",
"型號": "iPhone 14 Pro",
"容量": "128 GB",
"價格": 32900,
"全新": True
}
建立字典非常簡單,我們使用大括號 {} 來包覆所有資料,鍵與值之間用冒號 : 隔開,不同的項目則用逗號 , 隔開。
要查詢字典內的資料,我們可以像操作清單一樣,直接使用 Key 的名稱來存取其對應的 Value:
print(手機規格["廠牌"]) # 輸出:蘋果
print(手機規格["型號"]) # 輸出:iPhone 14 Pro
然而,如果我們查詢的 Key 不存在於字典中,程式碼會中斷並顯示錯誤訊息。為了避免這種情況,我們可以改用 get() 語法。get() 不僅能用來查詢字典,還可以讓我們在找不到 Key 時,設定一個預設的回傳訊息,而不是讓程式當機。
print(手機規格.get("顏色", "查無此項")) # 輸出:查無此項
此外,你也可以利用 If 條件判斷式 來檢查某個 Key 是否存在於字典中,再決定下一步的動作。
字典中的 Value 不僅可以是字串,它還可以是任何資料型態,例如數字 (int, float)、布林值 (bool),甚至可以是清單 (List) 或其他字典。這使得字典在儲存複雜、多層次的資料時更加靈活。
手機規格_進階 = {
"廠牌": "三星",
"型號": "Galaxy S23",
"容量": "256 GB",
"顏色": ["黑色", "綠色", "白色"], # 值為清單
"有庫存": True
}
# 存取字典中清單的元素
print(手機規格_進階["顏色"]) # 輸出:黑色
• 新增資料:如果字典中不存在指定的 Key,直接賦值即可新增一個新項目。
• 修改資料:如果指定的 Key 已經存在,賦值操作會直接覆寫其原有的 Value。
• 刪除資料:
◦ pop(key):根據指定的 Key 刪除單個項目。
◦ popitem():刪除字典中的最後一個項目,不需要指定 Key。
◦ clear():清除字典中的所有內容。
當我們想要一次性列出字典中的所有鍵、值或項目時,For Loop 迴圈 就派上用場了。
• 列出所有 Key:直接對字典進行 For Loop 迭代,會預設遍歷所有的 Key。
• 列出所有 Value:使用 字典名稱.values() 方法。
• 同時列出 Key 和 Value:使用 字典名稱.items() 方法,它會將每個鍵值對打包成一個元組 (tuple) 回傳。我們可以在 For Loop 中直接解包 (unpack) 這個元組,讓程式碼更清晰。
讓我們將今天所學的字典知識,應用到一個簡易的手機庫存查詢系統中。假設我們有多款手機的庫存資料,並儲存在一個清單中的字典裡。
手機庫存 = [
{"廠牌": "蘋果", "型號": "iPhone 14 Pro", "顏色": "深紫色", "容量": "256GB"},
{"廠牌": "小米", "型號": "Xiaomi 13 Ultra", "顏色": "黑色", "容量": "512GB"},
{"廠牌": "三星", "型號": "Galaxy S23 Ultra", "顏色": "綠色", "容量": "256GB"}
]
# 讓使用者輸入想查詢的廠牌
查詢廠牌 = input("請輸入您想查詢的手機廠牌:")
# 方法一:粗略判斷是否存在 (將所有字典轉為字串後判斷)
# 注意:這種方法在實際應用中可能不夠精確,但為來源提供的方法
if 查詢廠牌 in str(手機庫存):
print(f"{查詢廠牌} 有庫存!")
else:
print(f"{查詢廠牌} 無庫存。")
# 方法二:精確查詢並顯示詳細資訊
找到手機 = False
for 手機 in 手機庫存: # 遍歷手機庫存清單中的每個手機字典
if 手機["廠牌"] == 查詢廠牌: # 檢查字典的 "廠牌" Key 是否與查詢廠牌相符
print(f"型號:{手機['型號']}") # 注意:這裡使用單引號來存取字典的 Key
print(f"顏色:{手機['顏色']}")
print(f"容量:{手機['容量']}")
找到手機 = True
break # 找到後即可跳出迴圈
if not 找到手機:
print(f"抱歉,目前沒有 {查詢廠牌} 手機的庫存。")
這個範例展示了字典如何有效地組織結構化資料,讓資料的查詢和管理變得輕而易舉。透過將多個字典放入清單中,我們能夠建立一個小型資料庫,並透過迴圈和條件判斷來實現查詢功能。需要特別注意的是,在 print 語法中引用字典的 Key 時,如果外部字串已經使用雙引號,則內部引用字典 Key 的引號必須改用單引號,反之亦然,以避免語法錯誤。
恭喜您!今天我們學習了 Python 強大的 Dictionary (字典) 資料型態,掌握了其鍵值對的核心概念、如何定義、查詢,以及新增、修改和刪除資料的方法。我們也學會了如何搭配 For Loop 來高效地遍歷字典內容,並透過一個實用的手機庫存查詢系統,見證了字典在儲存和管理系統化資訊方面的強大應用。明天,我們將介紹如何將程式碼拆分成不同的檔案,以提高專案的可管理性:Module (模組),敬請期待!