我正在尝试编写一个函数,该函数读取包含具有相应分数(浮点数)的名称的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)
这是一个由在线互动蟒蛇学校pyschools提供的学习活动。我在输出中返回正确的结果,但它也返回"私有测试用例失败" 任何人都可以在这里看到代码中的任何严重缺陷吗?谢谢
答案 0 :(得分: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]'
>>>
哪个是正确的,因为字符串格式化为第一个数字。