从文本文件中按平均值,最高和最低排序数据

时间:2016-04-16 15:47:54

标签: python sorting

我正在尝试将我从文件中提取的一些数据排序为字母顺序(工作)平均数据(添加所有数据,忽略字母,并将其平均),最后将分数从最高到最低排序(再将用户名称放在第一位,尚未完成)。请帮忙,这是他的代码:

(将wf设置为查看文件的内容)

sort = input("What would you like to do with this class? Put them into alpabetical order(a)? Average the scores(b)? Highest to lowest(c)?")

with open(wf, 'r') as r:

    if sort == 'a':
        for line in sorted(r):
            print(line, end = '')

    elif sort == 'b':
        for line in sorted(r):
            print()

    elif sort == 'c':
        def score(line):
            return int(line.split(',')[1])
        with open(wf, 'r') as r:
            list.sort(r)
            for line in sorted(r,reverse=True):
                print(line)

1 个答案:

答案 0 :(得分:1)

求解平均值:

要获得平均值,您需要将所有分数加在一起,然后除以分数。你可以通过迭代线并总结所有分数,然后除以行数

来做到这一点

按分数排序:

您需要调用sorted()函数并提供自己的密钥。你有一个几乎可以做到的功能,我只是修了一下。您发送行列表和返回分数的键,然后将其反转,因为您希望它们从最高到最低。然后,只需循环遍历新的排序列表并打印每一行

总体评论

这个程序的结构非常混乱和多余。你应该只读一次文件,然后把所有内容弄清楚。在每个if语句中迭代文件只是很慢。您还应该使用很多功能。创建一个返回平均值的函数,一个返回按分数排序的列表的函数等。将所有代码全部加扰到主要内容会使其难以阅读

我已经在下面的代码中实现了这些,但我建议你自己尝试一下,因为你明白要做什么,只有在你遇到困难时才使用这段代码作为参考

sort = input("What would you like to do with this class? Put them into alpabetical order(a)? Average the scores(b)? Highest to lowest(c)?")
wf = "file.txt"

with open(wf, 'r') as r:
    if sort == 'a':
        for line in sorted(r):
            print(line, end = '')

    elif sort == 'b':
        totalScore = 0
        numOfScores = 0
        for line in sorted(r):
            numOfScores += 1
            totalScore+= int(line.split('score = ')[1])
        average = totalScore / numOfScores
        print(average)


    elif sort == 'c':
        def score(line):
            return int(line.split('=')[1])
        with open(wf, 'r') as r:
            linesList = r.readlines()
            sortedList = sorted(linesList, key=score)
            for line in sortedList:
                print(line.rstrip("\n"))

对于此示例,我使用了您提供的示例分数文件,如:

bob - score = 12
harry - score = 1
ellis - score = 21
sam - score = 30