我正在编写一个程序,将最后3个分数保存在我的游戏的每个用户的文本文件中。我已经编写了保存它的代码我现在将数据带回到程序中,这将得出用户的高分。我也已将分数保存在单独的列表中所有用户保存在1个列表中的所有用户所有用户在另一个用户中获得第二个分数,对于第三个分数则相同。我试图将这些放在他们自己的高分列表中,所以当我将名单与名称联合(在另一个列表中)时,我将能够按分数排序,但将附加到名称。 贝娄是我写的代码:
for i in range (2):
if score1[i] > score2[i] or score1[i]> score3[i]:
highscores.append(score1[i])
elif score2[i] > score1[i] or score2[i] > score3[i]:
highscores.append(score2[i])
elif score3[i] > score1[i] or score3[i] > score2[i]:
highscores.append(score3[i])
顺便说一句,它在2范围内的i循环中,因为它们目前只有2个用户。我知道我是非常愚蠢的,因为它意味着只有一个事件需要真实才能发挥作用但是当我尝试时它也不起作用。请按照这些方式工作,因为我的导师说'我有正确的想法'我也希望这有助于其他人在python中比较列表项和整数,因为我在互联网上找不到任何东西。 谢谢, 我等待指导
答案 0 :(得分:2)
and
,而不是or
。a < b < c
语法,而不是and
。你应该做的是使用Python内置的max
函数。干净的单线而不是6线if-elif
块。
highscores.append(max(score1[i], score2[i], score3[i]))
答案 1 :(得分:1)
可能不允许进行此分配,但对于需要执行类似操作的其他人,从大量值中选择前3个值的简单/快速方法是使用heapq.nlargest
。如果您有多个序列,可以itertools.chain
它们以避免连接(避免增加峰值内存使用量)。您甚至可以将名称(包括zip
和itertools.repeat
)附加到每个输入序列,以便选定的高分包括相关用户:
from heapq import nlargest
from itertools import chain, repeat
highscores = nlargest(3, chain(zip(score1, repeat('user1')),
zip(score2, repeat('user2')),
zip(score3, repeat('user3'))))
highscores
将是一个list
,其中包含三个元素(从最高分到最低分,按用户名分隔),每个元素都是tuple
形式的(score, username)
}。