如何排序和打印N个高分(最高在前)
How to sort and print N number of high scores (Highest first)
我正在尝试对我的简单游戏的排行榜进行排序并打印出前 5 名的分数,但它只是按照保存时的顺序打印出整个列表,并且在添加后没有组织
for eachline in y[:5]:
print(eachline)
,因为没有这段代码,它会按从小到大的数字顺序打印整个列表,这不是我需要的。任何帮助将非常感激。排行榜文件 link:https://drive.google.com/open?id=1w51cgXmmsa1NWMC-F67DMgVi3FgdAdYV
leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
for line in fin:
leaders.append(line.strip())
y = sorted(leaders, key = lambda x: float(x[0]))
for eachline in y[:5]: #after this and the next line it prints just the file contents
print(eachline)
部分原因是您的输入文件是结构类似于 "Integer : String" 的字符串。当您打开文件并开始逐行读取并调用 line.strip()
时,您所做的就是从每行字符串的开头和结尾删除所有多余的空格。
考虑到这一点,排序时使用键 lambda x: float(x[0])
。这告诉 sorted
函数获取领导列表中的每个人并获取每个字符串的第一个字符(因为领导列表的所有成员都是字符串!),并将第一个字符转换为浮点数。 float(x[0])
对于所有排行榜上的人的值是1
,这意味着排序算法认为你的值已经排序了!
为了解决这个问题,您可以使用 split()
。
leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
for line in fin:
leaders.append(line.split())
y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)
for eachline in y[:5]: #after this and the next line it prints just the file contents
print(" ".join(eachline))
输出:
19 : Felix
16 : Muhammad
14 : Steve
13 : David
12 : Alex
您可以通过在排序方法中添加关键字reverse=True
来按降序排序。
y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)
我正在尝试对我的简单游戏的排行榜进行排序并打印出前 5 名的分数,但它只是按照保存时的顺序打印出整个列表,并且在添加后没有组织
for eachline in y[:5]:
print(eachline)
,因为没有这段代码,它会按从小到大的数字顺序打印整个列表,这不是我需要的。任何帮助将非常感激。排行榜文件 link:https://drive.google.com/open?id=1w51cgXmmsa1NWMC-F67DMgVi3FgdAdYV
leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
for line in fin:
leaders.append(line.strip())
y = sorted(leaders, key = lambda x: float(x[0]))
for eachline in y[:5]: #after this and the next line it prints just the file contents
print(eachline)
部分原因是您的输入文件是结构类似于 "Integer : String" 的字符串。当您打开文件并开始逐行读取并调用 line.strip()
时,您所做的就是从每行字符串的开头和结尾删除所有多余的空格。
考虑到这一点,排序时使用键 lambda x: float(x[0])
。这告诉 sorted
函数获取领导列表中的每个人并获取每个字符串的第一个字符(因为领导列表的所有成员都是字符串!),并将第一个字符转换为浮点数。 float(x[0])
对于所有排行榜上的人的值是1
,这意味着排序算法认为你的值已经排序了!
为了解决这个问题,您可以使用 split()
。
leaders = list()
filename = 'leaderboard.txt'
with open(filename) as fin:
for line in fin:
leaders.append(line.split())
y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)
for eachline in y[:5]: #after this and the next line it prints just the file contents
print(" ".join(eachline))
输出:
19 : Felix
16 : Muhammad
14 : Steve
13 : David
12 : Alex
您可以通过在排序方法中添加关键字reverse=True
来按降序排序。
y = sorted(leaders, key = lambda x: float(x[0]), reverse=True)