2013-03-22 15 views
3

문제는 this입니다실행 시간 오류 오류 상태로 종료 1

import re 
import sys 
def fun(): 
    for ind in ratio: 
     max_num = ratio_list[0] 
     if ratio[ind] == max_num: 
      print ind 

    ratio_list.remove(ratio_list[0]) 

hits = [] 
song = [] 
n,m = raw_input().split(' ',1) 


for i in range(0,int(n)): 
    h,n = raw_input().split(" ",1) 

    is_number = isinstance(int(h), int) 
    is_string = len(n)<=30 and bool(re.match('[a-z_0-9]+$', n)) 
    if not(is_number and is_string): 
     sys.exit("Error"); 
    hits.append(int(h)) 
    song.append(n) 
ratio = {} 
ratio_list = [] 
f_of_i = hits[0] 
counter = 1 
index = 0 

for hit in hits: 
    ratio_list.append(hit*counter) 
    ratio[song[index]] = hit*counter 
    index = index +1 
    counter = counter +1 

ratio_list.sort() 
ratio_list.reverse() 

for j in range(0,int(m)): 
    fun() 

내가 뭘 잘못하고 있니? 나는 왜 그 해결책이 나를 용서할 수 없는지 궁금하다.

+0

자동화 된 솔루션 테스트가'raw_input()'으로 입력을 제공한다고 생각하지 않습니다. 그들은 프로그램에 입력 파일을 제공하는 경향이 더 큽니다. 프로그램은이를 분석 한 다음 출력을 인쇄해야합니다. –

+0

내가 본 한 가지는'fun()'함수에'ratio '를 매개 변수로주지 않는다는 것입니다. 그것은 글로벌 사전이 아닙니다. 물론 이것은 아마도 당신의 런타임 오류를 수정하지 않을 것입니다. –

+0

@Allendar 오류가 없습니다. 그것은 작동합니다. – Leonidus

답변

4

난 당신이

sys.exit("Error"); 

으로는 documentation 설명 타격하고 의심 :

일부 시스템은 특정 종료 코드에 특정 의미를 할당하기위한 규칙을 가지고 있지만, 이들은 일반적으로 저개발이다; 유닉스 프로그램은 일반적으로 명령 행 구문 오류에 대해 2를 사용하고 다른 모든 종류의 오류에 대해서는 1을 사용합니다. 객체의 또 다른 유형이 전달되면 없음은 0 통과에 해당하지 않으며, 다른 개체가 입력 검증 약간의 휴식을 가치가있을 수도 1.

의 종료 코드에 표준 오류 및 결과에 인쇄? 지금은 너무 엄격하기 때문에 스펙 내에서 나타나는 입력을 거부합니다 (예 : 재생 횟수와 노래 제목 사이에 두 개의 공백이있는 경우).

또 다른 가능성은 코드에서 예외가 발생한다는 것입니다. 내 컴퓨터에서 이것은 또한 종료 코드가 1이됩니다.

마지막으로, 버그가 아니지만 n이라는 변수를 재사용하는 방법은 의심스러운 스타일이라고 생각합니다.

+0

내가 그것을 시도하자. : D,하지만 노래의 이름에 'a-z0-9'이외의 것이 있으면 종료 규칙을 제공해야합니다. 어떻게 그럴까요? – Leonidus

+0

버전이 문제가 될 수 있습니까? 내 컴퓨터가 잘 돌아가는 원인. :/ – Leonidus

+0

@ Leonidus : 예, 버전이 문제가 될 수 있습니다. 내 조언은 그들이 사용하고있는 Python의 동일한 버전을 사용하는 것이다 (2.6). – NPE