你的问题是,在把第一项和最后一项切掉之前,你没有对列表进行排序。您可以通过将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)
以前,代码将返回:
^{pr2}$
这是错误的,因为:>>> 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]'
>>>
这是正确的,因为字符串格式舍入到第一个数字。在