编写一个函数读取包含运动员姓名和分数的txt文件,计算并返回最高平均分
我正在尝试写一个函数,这个函数可以读取一个文本文件,里面包含了名字和对应的分数(小数),比如说:李宁,9.8 9.7 9.6 9.3 9.4 9.8。每个名字(选手)和对应的分数都在文件的新一行中。这个函数应该返回最高的平均分,以及对应的名字。平均分的计算方法是,先去掉最高分和最低分。
def getWinner(filename):
results = open(filename).readlines()
winner = ''
max_score =0
for line in results:
tokens = line.split(',')
name = tokens[0]
scores = map(float, tokens[1].split())
ave = sum(scores[1:-1])/(len(scores) - 2)
if ave > max_score:
winner = name
max_score = ave
return "%s [%.1f]" % (winner, max_score)
这是一个由在线互动Python学校pyschools提供的学习活动。我在输出中得到了正确的结果,但同时也显示“私有测试用例失败”。有没有人能看到代码中有什么严重的问题吗?谢谢。
1 个回答
1
你的问题在于,你没有在切掉列表的第一个和最后一个项目之前对列表进行排序。你可以通过把 sorted
应用到你的列表(scores
)来解决这个问题。
def getWinner(filename):
results = open(filename).readlines()
winner = ''
max_score =0
for line in results:
tokens = line.split(',')
name = tokens[0]
scores = sorted(map(float, tokens[1].split()))
ave = sum(scores[1:-1])/(len(scores) - 2)
if ave > max_score:
winner = name
max_score = ave
return "%s [%.1f]" % (winner, max_score)
之前,代码返回的是:
>>> getWinner('file.txt')
'Li Ning [9.5]'
>>>
这是错误的,因为:
>>> x = '9.8 9.7 9.6 9.3 9.4 9.8'
>>> x = sorted(map(float, x.split()))[1:-1]
>>> sum(x)/len(x)
9.625
>>>
修改后的代码返回的是:
>>> getWinner('file.txt')
'Li Ning [9.6]'
>>>
这是正确的,因为字符串格式化会四舍五入到第一位数字。