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