【问题标题】:Python dictionary not updating valuesPython字典不更新值
【发布时间】:2015-11-19 07:19:37
【问题描述】:

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

...

    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编辑器和用Python自己写的REPL。)

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

【问题讨论】:

  • for person in liars: self.players[player.lower()] += liarScore - 确定不应该是person.lower()
  • @TessellatingHeckler,是的。呵呵。

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


【解决方案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

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

【讨论】:

  • ...这些是 debug 打印语句。我没有在liars 循环中打印任何内容,因为它应该与advisers 循环相同。但是,您仍然遇到了该错误的原因。有时,问题就在我们面前。当我读到你的答案时,我捂着脸。奇怪的是,尽管player 位于advisers 循环中的所有位置,但将其更改为adviser 修复了它。显然,以前的使用使它感到困惑。编程很奇怪。感谢您的帮助,尤其是您的快速回复!我实际上计划明天使用这个,所以我很感激你的回答很快!
猜你喜欢
  • 2017-07-18
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 2016-02-20
  • 1970-01-01
  • 2022-07-24
相关资源
最近更新 更多