2014-06-14 1 views
-1

해당 점수 (부동 소수점)와 이름을 포함하는 TXT 문서를 읽는 함수를 작성하려고합니다. Li Ning, 9.8 9.7 9.6 9.3 9.4 9.8. 각 이름 (경쟁 업체)과 해당 번호는 문서의 줄 바꿈에 있습니다. 함수는 가장 높은 평균 점수와 해당 이름을 반환해야합니다. 평균 점수가 계산됩니다. 참가자의 평균 점수는 최고 점수와 최하 점수를 버린 후에 계산됩니다. 선수의 이름과 점수를 포함하는 txt 파일을 읽는 함수를 작성하십시오. 가장 높은 평균 점수 계산 및 반환

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

첫 번째 항목과 마지막 항목을 잘라내 기 전에 목록을 정렬하지 않는 것이 문제였습니다. 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]' 
>>> 

때문에 문자열 형식은 첫 번째 자리.

관련 문제