2013-03-22 65 views
3

的問題是this: 我試圖解決這個問題,我想我確實做了,但是當我寄出了評價它說運行時錯誤退出,錯誤狀態1

We have tested your solution, and while doing so we unfortunately 
discovered the following error: 
Run Time Error 

Exited with error status 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()'輸入。他們更傾向於給程序一個輸入文件。你的程序應該解析它,然後打印輸出。 – 2013-03-22 11:21:50

+0

我看到的一件事是,您不會將'fun()'函數的'ratio'作爲參數。這不是一本全球性的字典。當然,這可能不會解決您的運行時錯誤。 – 2013-03-22 11:22:00

+0

@Allendar它沒有錯誤。有用。 – Leonidus 2013-03-22 11:22:41

回答

4

我懷疑你打

sys.exit("Error"); 

正如documentation解釋說:

一些系統具有特定退出代碼指定特定的含義慣例,不過一般都是不發達; Unix程序通常使用2作爲命令行語法錯誤,1使用其他類型的錯誤。如果對象的另一種類型的通過,沒有相當於傳遞零,和任何其他對象被打印到stderr,並且導致的1

退出代碼可能是值得放鬆你輸入驗證一點?現在它非常嚴格,它會拒絕我在規範中出現的輸入(例如,如果播放計數和歌曲標題之間有兩個空格)。

另一種可能性是您的代碼引發異常。在我的機器上,這也導致退出代碼爲1.

最後,雖然沒有錯誤,但我認爲您重複使用名爲n的變量的方式是值得懷疑的風格。

+0

讓我試試看。 :D,但是如果歌曲名稱包含「a-z0-9」以外的任何內容,我需要提供一個終止規則,你如何建議我這麼做? – Leonidus 2013-03-22 11:38:55

+0

可能版本是一個問題?導致我的機器運行良好。 :/ – Leonidus 2013-03-22 11:42:54

+0

@Leonidus:是的,版本可能是一個問題。我的建議是使用他們使用的相同版本的Python(2.6)。 – NPE 2013-03-22 11:43:36

相關問題