我不确定如何让我的程序排序并从外部文件中读取

Im not sure how i can make my program sort and read from an external file

我正在 nut shell 创建一个骰子游戏,分数被保存到一个外部文件名 'scores'

Krystian: 5
Adam: 7
Unknown: 2
AWD: 18
Muaadh: 5
Yasir: 6
Zaim: 7
Ishfaq: 5
Tanzeel: 87
Hamzah: 3
Mohammed: 5
Robert: 6
Yasir: 5
Krystian: 61
Natalie: 72

这些是用户名和他们的分数。我见过一些 csv 排序算法,但问题是我只是一个初学者,我不知道它们是如何工作的,所以我不能真正使用它们。我真正想要的是如何将他们从最高分排序到最低分的解释,我希望程序打印出前 5 名玩家。

with open('scores.txt', newline='') as f:
   data = [{k: v for k, v in row.items()} for row in csv.DictReader(f, delimiter=':', fieldnames=['name', 'score'], quoting=csv.QUOTE_NONE)]

   sorted_data = sorted(data, key = lambda i: i['score'], reverse=True)
   for x in sorted_data:
       print (x['name'] + ': ' + x['score'])

到目前为止,这就是我从其他 post 设法 'copy' 获得的所有信息,但它仍然无法正常工作。我认为值得分享的是,当你 运行 程序询问用户他们的名字,然后它得到他们的分数,然后保存到文件中,最后我问用户是否愿意查看前 5 名玩家,这就是我希望我的程序对外部文件进行排序并打印出前 5 名玩家的地方。 我很抱歉,因为我见过很多这样的 post,但我自己 post 这样做的唯一原因是因为我真的不明白其中的任何一个。感谢您走到这一步。

我认为您的问题之一是使用字典,它是非顺序的并且不支持排序。您可以改为列出文件中的每个名称、分数对。把分数放在第一位,然后你可以在这个列表上调用排序:

highscores = []

with open('scores.txt') as file_object:
  for line in file_object:
    name, score = line.rstrip().split(':')
    highscores.append ([int(score), name]) 

sorted_scores = sorted(highscores)

那么如果你想打印出分数:

for score, name in sorted_scores:
  print (name + ': ' + str(score))

您已经完成了 80%,您只需要隔离前 5 个分数,去掉前导空格,并将字符串转换为整数。我建议使用字典而不是 csv 文件,但你所拥有的是有效的。您的 csv 中也有重复项,使用字典可以修复。

with open('scores.txt', newline='') as f:
            # Stripping the leading spaces off of the numbers and names
   data = [{k.strip(): v.strip() for k, v in row.items()} for row in csv.DictReader(f, delimiter=':', fieldnames=['name', 'score'], quoting=csv.QUOTE_NONE)]

                                              # Making the string an integer
   sorted_data = sorted(data, key = lambda i: int(i['score']), reverse=True)
                       # Isolating the top 5 results using indexes.
   for x in sorted_data[:5]:
       print (x['name'] + ': ' + x['score'])