[英]Python dictionary not updating values
我有一段代碼可以更新玩家的分數:
...
self.players[speaker.lower()] += speakerScore
for player in advisers:
print(player, self.players[player.lower()])
self.players[player.lower()] += adviserScore
print(player, self.players[player.lower()])
for person in liars:
self.players[player.lower()] += liarScore
print(list(self.players.items()))
...
for player in self.players.items():
print(player[0] + ": "+str(player[1]))
self.players
是一個包含小寫的player:score
的字典。 可以保證通過以前的代碼擁有所有參與者,並且advisers
和liars
都有正確的參與者。 這是我得到的輸出:
a 0
a 7.694582912747661
[('a', 0.0), ('s', 15.389165825495322), ('l', 0)]
a: 0.0
s: 15.389165825495322
l: 0
作為參考, s
是發言人, a
是唯一的顧問, l
是唯一的騙子。 他們的所有分數都從0開始,而7.694582912747661是a
應該收到的分數。 ( b
也是正確的, l
應該收到-7.694582912747661。是的,評分很奇怪。很抱歉。)我正在IdleX中進行編輯,並在IdleX的REPL中對其進行測試。 (IdleX是IDLE的改進版本,IDLE是Python編輯器和用Python本身編寫的REPL。)
為什么沒有輸入正確的分數?
您沒有在liars
循環中打印任何內容,因為那里有錯誤。 您在循環變量稱為person
時使用了player.lower()
:
for person in liars:
# ^^^^
self.players[player.lower()] += liarScore
# ^^^^^^
您的輸出與liarScore
設置為-advisesScore
,並且'a'
是最后一個player
值。
我將同時更改player
和person
變量以反映循環源:
for adviser in advisers:
self.players[adviser.lower()] += adviserScore
for liar in liars:
self.players[liar.lower()] += liarScore
這樣,您可能不太可能將兩者混淆。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.