簡體   English   中英

Python字典不更新值

[英]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的字典。 可以保證通過以前的代碼擁有所有參與者,並且advisersliars都有正確的參與者。 這是我得到的輸出:

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值。

我將同時更改playerperson變量以反映循環源:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM