2014-02-07 92 views
0

我試圖解決一個球體在線裁判(SPOJ)的問題,它需要我打印1和n之間的所有可被x整除但不能被y整除的整數,My代碼是正確的,當我在Python IDE上測試,但是當我嘗試在SPOJ上輸入時,我得到運行時錯誤(NZEC),NZEC是什麼,爲什麼我得到它?這是我的代碼:爲什麼我的Python代碼返回一個NZEC錯誤

test_cases = raw_input() 
input = [] 
list = [] 
for z in xrange(int(test_cases)): 
    input = raw_input() 
    n,x,y = input.split(' ') 
    for z in xrange(int(n)): 
     if z%int(x) == 0 and z%int(y) != 0: 
       list.append(z) 
    answer1 = str(list).strip('[]') 
    answer2 = answer1.replace(',', '') 
    print answer2 
+1

爲了將來的參考,「NZEC」錯誤是「非零退出代碼」。可能是因爲例外。 – Sinkingpoint

+0

@NickT有時會發生這樣的情況,當問題設置器產生問題時,他會生成一個輸入測試文件,在其中他會在每個輸入行之後留下一個空格,因此不是使用input.split(''),而是使用input.split()。 示例測試文件包含4之後的空格,即我們獲得NZEC,因此請使用input.split()而不是input.split('') – sp1rs

回答

1

您是否也許在談論this問題?

我看到的一些問題在你的代碼:

  1. 你得到NZEC因爲也許有在你沒有考慮到輸入一個空行。 (見下面的瑣碎修改來解決這個問題)

  2. 此外,你的代碼有一個bug,因爲z從0開始到n-1,而z應該> 1,所以z應該在xrange(2,int( n))

  3. 你不需要去掉,然後用空格替換逗號。你可以在一次去做(見下面)

我修改了你的代碼,它通過了測試用例。

def get_line(): 
    while True: 
     line = raw_input().rstrip() 
     if not line: 
      pass 
     else: 
      return line 

test_cases = get_line() 
for _ in xrange(int(test_cases)): 
    input = get_line() 
    n,x,y = [int(z) for z in input.split(' ')] 
    list = [] 
    for z in xrange(2,n): 
     if z%x == 0 and z%y != 0: 
       list.append(z) 
    answer1 = ' '.join(map(str,list)) 
    print answer1 
+0

噢好吧,非常感謝您幫助並簡化了我的代碼。 – NickT

相關問題