编写一个读取文本文件的函数,其中包含运动员的姓名和分数。计算并返回最高平均分

时间:2014-06-14 04:03:33

标签: python

我正在尝试编写一个函数,该函数读取包含具有相应分数(浮点数)的名称的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提供的学习活动。我在输出中返回正确的结果,但它也返回"私有测试用例失败" 任何人都可以在这里看到代码中的任何严重缺陷吗?谢谢

1 个答案:

答案 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]'
>>> 

哪个是正确的,因为字符串格式化为第一个数字。