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
的字典。前面的代码保证所有玩家都有,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 的 REPL 中测试它。 (IdleX 是 IDLE 的改进版本,它是 Python 编辑器和 REPL 本身编写的 Python。)
为什么输入的分数不正确?
您没有在 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
这样你就不太可能混淆两者。
我有一段代码可以更新玩家的分数:
...
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 的 REPL 中测试它。 (IdleX 是 IDLE 的改进版本,它是 Python 编辑器和 REPL 本身编写的 Python。)
为什么输入的分数不正确?
您没有在 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
这样你就不太可能混淆两者。