1

外部文件的内容是这样的:

Ricky, 12
Sachin, 45
Brian, 2
Monty, 1

我基本上想要做的是能够在 python 中阅读它并能够对其进行排序,因此它的得分最低,得分最高。

这是我到目前为止得到的代码:

def SaveTopScores():
  return HiScores.rsplit('(',1)[1]

  with open("HiScores.txt", "r")as file:
    HiScoreslist = HiScores.read().splitlines()

  HiScoreslist.sort()

  HiScoreslist.sort(key=HiScore)

  for HiScore in HiScoreslist:
    print(HiScore)

我仍然是 python 的新手,确实需要帮助。请纠正我哪里错了,如果我完全错了,如果是,我解决问题的最佳方法是什么?

4

3 回答 3

2

有一些列表推导:

with open("HiScores.txt") as hiscores:
    scores = [line.split(',') for line in hiscores if line.strip()]
scores = [(name.strip(), int(score)) for name, score in scores]
scores.sort(key=lambda s: s[1], reversed=True)

for name, score in scores:
    print('{:<20} {:>10}'.format(name, score))

这个:

  1. 作为上下文管理器 ( with ... as ...) 打开文件,因此它会自动关闭
  2. 循环分割每一行的文件(前提是该行不为空)
  3. 将文件中的每个 2 值条目转换为剥离字符串和整数
  4. 根据每个元组中的第二个值(分数)对文件进行排序,反转结果(最高分优先)
  5. 打印格式化的每个条目(在 20 个字符的区域中将每个名称向左对齐,在 10 个字符的字段中将每个分数向右对齐)。
于 2013-03-04T12:04:12.913 回答
1

所以,有点像这样?

def scores(fn):

    data = []
    with open(fn) as f:
        for ln in f:
            name, score = ln.strip().split(',')
            data.append((int(score.strip()), name))

    for score, name in sorted(data, reversed=True):
        print name, score
于 2013-03-04T12:03:35.417 回答
0

在不过多更改原始代码的情况下,这应该可以工作。如果您需要解释任何部分,请告诉我。

with open("HiScores.txt", "r") as fin:
    HiScores = fin.read().splitlines()

HiScoresList = []

for score in HiScores:
    name, score = score.split(', ')
    score = int(score.strip())
    HiScoresList.append((name, score))

# Look at two score entries, and compare which score is larger
def BestScore(a, b):
   return cmp(b[1], a[1])

HiScoresList.sort(BestScore)

for HiScore in HiScoresList:
    print(HiScore)

印刷:

('Sachin', 45)
('Ricky', 12)
('Brian', 2)
('Monty', 1)
于 2013-03-04T12:12:07.363 回答