Python字典没有更新值

时间:2015-11-19 07:19:38

标签: python debugging python-3.x dictionary python-idle

我有一段代码可以更新玩家的分数:

...

    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&#中测试它39; s REPL。 (IdleX是IDLE的改进版本,它是Python编辑器和用Python编写的REPL。)

为什么没有输入正确的分数?

1 个答案:

答案 0 :(得分:1)

你没有在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

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