2014-02-16 32 views
1

任務(來自codeeval)將讀取具有幾個不同數字的文件,如果它是開心數字,則打印1;如果不是開心數字,則打印0。部分任務是忽略該項目(num),如果它是空行。這裏是我的代碼:Python:識別快樂數字時忽略空行

import sys 
test_cases = open(sys.argv[1], 'r') 
for num in test_cases: 
    if num=="": 
     pass 
    else: 
     liszt=[] 
     while num>1: 
      newnum=str(num) 
      total=0 
      for i in newnum: 
       total+=int(i)**2 
      if total not in liszt: 
       liszt.append(total) 
       num=total 
      else: 
       print 0 
       break 
     else: 
      print 1 
test_cases.close() 

我得到引用total+=int(i)**2線,說這句話的錯誤信息:這讓我覺得我不是成功地忽略空行

ValueError: invalid literal for int() with base 10: '' 

。我在正確的軌道上嗎?如果是這樣,我應該對代碼做些什麼改變?

感謝您的幫助!

+0

我想你想'繼續'而不是'通過'。 – squiguy

+0

只需'打印num',看看發生了什麼...... – alfasin

+1

@squiguy兩者都會在這裏做同樣的事情。 – Nabla

回答

1

爲了確保你不空行和新線交易,你可以簡單地添加:

if num.strip(): 
    num = num.rstrip('\n') 

    # DO SOMETHING HERE... 
    # ... 

所以你會得到:

import sys 
test_cases = open(sys.argv[1], 'r') 
for num in test_cases: 
    if num.strip(): 
     num = num.rstrip('\n') 

     # DO SOMETHING HERE... 
     # ... 

test_cases.close() 
+0

這會更優雅'如果num.strip():' – alfasin

+0

@alfasin:是的你是對的:)。考慮到採購訂單;) – Littm

+0

剝離兩次是一個壞主意。 'strip'一次並檢查剝離的字符串是否有效。 – thefourtheye