我在使用列表更新游戏中玩家分数排名点的代码时遇到了一些问题。我的第一个列表是球员进入的位置列表,例如:
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]]
如果有任何帮助,我将不胜感激,因为我是编程新手,正在努力解决背后的代码和逻辑
感谢
您可以使用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])
来实现最终输出,但字典将允许你在稍后的程序中增加每个玩家的分数。
如果你想在开始时初始化你的玩家等级,并在必要时更新它们,你可以这样做:
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
更新您的玩家等级。