【问题标题】:Overwriting a python.txt file to save only the last 3 entries per Name覆盖 python.txt 文件以仅保存每个名称的最后 3 个条目
【发布时间】:2015-03-18 09:54:35
【问题描述】:

我有一个将用户分数保存到文件的测验程序。我有一个函数可以查看文件中一个人名下的所有分数并输出他们的平均分数,但我需要的是它只考虑每个名字的最后 3 个分数。这是我到目前为止的代码

with open("highscoresclass1.txt") as f:
d = {}

for line in f:
    column = line.split(":")
    names = column[0]
    scores = int(column[1].strip())

    count = 0
    while count < 3:
        d.setdefault(names, []).append(scores)
        count = count + 1

averages=[]
for name, v in d.items():
    average = (sum(v)/len(v))
    averages.append((name, average))

for name, average in sorted(averages, key=lambda a: a[1], reverse=True):
    print(name, average)

【问题讨论】:

  • 你能显示示例文本文件吗?
  • @Optimus 我不知道如何发布图片,但说“Joe”的分数是 0 先是 3,然后是 3 10,所以如果你理解的话,我不希望它考虑到 0?
  • 克里斯:0 套件:4 乔:0 乔:10 乔:10 乔:10
  • average = (sum(v[-3:])/len(v[-3:]))?
  • @greschd 非常感谢,这似乎奏效了。 :)

标签: python


【解决方案1】:
with open("highscoresclass1.txt") as f:
d = {}

for line in f:
    column = line.split(":")
    names = column[0]
    scores = int(column[1].strip())

    count = 0
    while count < 3:
        d.setdefault(names, []).append(scores)
        count = count + 1

averages=[]
for name, v in d.items():
    average = (sum(v[-3:])/len(v[-3:]))
    averages.append((name, average))

for name, average in sorted(averages, key=lambda a: a[1], reverse=True):
    print(name, average)

谢谢

【讨论】:

    猜你喜欢
    • 2014-07-21
    • 2020-08-21
    • 1970-01-01
    • 2019-11-04
    • 2023-03-23
    • 2018-12-12
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多