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

-1 投票
1 回答
535 浏览
提问于 2025-04-18 09:45

我正在尝试写一个函数,这个函数可以读取一个文本文件,里面包含了名字和对应的分数(小数),比如说:李宁,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]'
>>> 

这是正确的,因为字符串格式化会四舍五入到第一位数字。

撰写回答