[英]KeyError: 0 python with python dict
所以我正在嘗試用 python 重新創建一個 spaceInvaders 游戲。 這里是存放我的外星人的地方:
aliens = dict()
每次我們提高游戲級別時,都會添加一個新的外星人,它的 id 作為鍵,他的位置和生命值(每個外星人有 2 生命值,在兩次射擊后死亡,每次造成一次傷害)作為他的值,所以外星人字典看起來像這樣:
aliens = {
0: [(100, 50), 2],
1: [(50, 200), 1],
etc...
}
現在每次外星人死亡時,我將其生命值設置為-1
並將他的位置設置為(-100, -100)
以將他排除在視野之外,現在當我調用cleanAlien()
function 迭代外星人時,就會出現問題數組並彈出所有生命值等於-1
或超出范圍 position 的外星人,這是 function:
def cleanAliens():
global aliens
for i in range(len(aliens)):
if(aliens[i][0] == (-100, -100) or aliens[i][1] < 0):
aliens.pop(i);
i -= i
但是,當我嘗試運行時,出現錯誤:
if(aliens[i][0] == (-100, -100) or aliens[i][1] < 0):
KeyError: 0
有任何想法嗎?
提前致謝。
我不確定這個特定錯誤的原因,但似乎aliens
的結構不像預期的那樣。
但是,您可以遍歷字典的鍵,而不是像這樣遍歷它的大小:
for i in list(aliens.keys()):
if aliens[i][0] == (-100, -100) or aliens[i][1] < 0:
aliens.pop(i)
這樣你就不會陷入這個關鍵問題。
list(aliens.keys())
返回字典中鍵的副本,以便您對其進行迭代,從字典中刪除一個后,您只需繼續下一個。
(順便說一句, i -= i
行沒有意義,因為i
將根據其迭代器設置下一次迭代,因此您實際上無法更改其值)
代替:
for i in range(len(aliens)):
if(aliens[i][0] == (-100, -100) or aliens[i][1] < 0):
aliens.pop(i);
i -= i
你應該使用理解:
aliens = { k:v for k,v in aliens.items() if v[0] != (-100,100) and v[1] >= 0 }
更新:收到有關“相同錯誤”的評論后進行測試:
>>> aliens = {
... 0: [(100, 50), 2],
... 1: [(50, 200), 1],
... }
>>> aliens = { k:v for k,v in aliens.items() if v[0] != (-100,100) and v[1] >= 0 }
>>>
沒有錯誤。
編輯:通過創建一個列表來修復我的錯誤,該列表附加了每個要刪除的鍵,然后傳遞給這個 function:
def Aliens():
global aliens
clean = list()
for i in aliens.keys():
if(aliens[i][0] == (-100, -100) or aliens[i][1] < 0):
clean.append(i)
cleanAliens(clean)
和
def cleanAliens(cleanList):
global aliens
for i in range(len(cleanList)):
aliens.pop(cleanList[i]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.