我在使用列表制作一些代码来更新游戏中玩家得分的排名积分时遇到了一些麻烦。我的第一个列表是玩家进来的位置列表,例如:
results = [P2, P4, P3, P1, P5, P6]
此列表按降序排列(P2排在第一位,P4排在第二位等),由我在程序中的其他代码确定。我有的第二个列表是我想根据他们的位置分配给每个玩家的排名积分列表:
rankingPoints = [100, 50, 25, 10, 5, 0]
(P2将获得100,P4将获得50,等等)
最后,我有第三个列表,其中包含每个播放器的嵌套列表:
playerRank = [[P1], [P2], [P3], [P4], [P5], [P6]]
基本上我想做的是用“0”排名分数初始化'playerRank'列表中的每个玩家(玩家从csv文件读入列表,我无法手动将其初始化为'0')所以它看起来像这样:[[P1,0],[P2,0],[P3,0]]等。
然后根据他们在游戏中的位置,将适当数量的排名分数添加到他们当前的排名分数(将有多个游戏,因此排名分数将在玩家的当前排名分数之上不断添加),期望的结果看起来像是:
playerRank = [[P1, 10] [P2, 100], [P3, 25], [P4, 50], [P5, 5], [P6, 0]]
对于这方面的任何帮助都会非常感激,因为我是编程新手并且正在努力解决它背后的代码和逻辑
由于
答案 0 :(得分:1)
您可以使用defaultdict
更新分数,zip
来创建游戏结果:
from collections import defaultdict
results = ['P2', 'P4', 'P3', 'P1', 'P5', 'P6']
rankingPoints = [100, 50, 25, 10, 5, 0]
d = defaultdict(int)
for a, b in zip(results, rankingPoints):
d[a] += b
final_results = [[a, b] for a, b in sorted(d.items(), key=lambda x:x[0])]
输出:
[['P1', 10], ['P2', 100], ['P3', 25], ['P4', 50], ['P5', 5], ['P6', 0]]
虽然您可以使用sorted(zip(results, rankingPoints), key=lambda x:x[0])
来获得最终输出,但字典将允许您稍后在程序中增加每个玩家的分数。
答案 1 :(得分:0)
如果您想在开始时初始化您的玩家排名并在必要时更新它们,您可以执行以下操作:
def updateScore(playerRank, rankingPoints):
for ind, i in enumerate(rankingPoints):
playerRank[ind][1] = playerRank[ind][1] + rankingPoints[ind]
results = ['P2', 'P4', 'P3', 'P1', 'P5', 'P6']
rankingPoints = [100, 50, 25, 10, 5, 0]
print("Initializing player ranks...")
playerRank = [[results[i],0] for i in range(0,len(results))]
print(playerRank)
print("Updating scores...")
updateScore(playerRank, rankingPoints)
playerRank = sorted(playerRank)
print(playerRank)
输出:
Initializing player ranks...
[['P2', 0], ['P4', 0], ['P3', 0], ['P1', 0], ['P5', 0], ['P6', 0]]
Updating scores...
[['P1', 10], ['P2', 100], ['P3', 25], ['P4', 50], ['P5', 5], ['P6', 0]]
只要您想更新玩家排名,就可以致电updateScore
。