我有一段代码可以更新玩家的分数:
...
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&#中测试它39; s REPL。 (IdleX是IDLE的改进版本,它是Python编辑器和用Python编写的REPL。)
为什么没有输入正确的分数?
答案 0 :(得分:1)
你没有在liars
循环中打印任何错误;您在调用循环变量player.lower()
时使用了person
:
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
这样你或许不太可能混淆两者。