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 的改进版本,它是 Python 编辑器和 REPL 本身编写的 Python。)

为什么输入的分数不正确?

您没有在 liars 循环中打印任何内容,这是您出错的地方;你使用 player.lower() 而你的循环变量被称为 person:

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

这样你就不太可能混淆两者。