2014-12-19 185 views
2

我正在進行CodeEval挑戰並解決了以數字列表作爲輸入的問題,然後輸出每行數字的總和。這裏是我的代碼,使某些你明白我的意思:從字符串中刪除第一個字符

import sys 
test_cases = open(sys.argv[1], 'r') 
for test in test_cases: 
    if test: 
     num = int(test) 
     total =0 
     while num != 0: 
      total += num % 10 
      num /= 10 
     print total 


test_cases.close() 

我試圖改寫這個地方花費數作爲一個字符串,切片各爲0指數,然後將這些在一起(好奇,想看看什麼時間和內存的差別是 - 全新的編碼,並試圖找到多種方式做的事情爲好)

不過,我被困在得到這個執行並具備以下條件:

import sys 
test_cases = open(sys.argv[1], 'r') 
for test in test_cases: 
    sums = 0 
    while test: 
     sums = sums + int(str(test)[0]) 
     test = test[1:] 
    print sums 

test_cases.close() 

我收到一個「ValueError:無效文字int()與基地10:「」」

樣品輸入是一個文本文件,它看起來像這樣:

3011 
6890 
8778 
1844 
42 
8849 
3847 
8985 
5048 
7350 
8121 
5421 
7026 
4246 
4439 
6993 
4761 
3658 
6049 
1177 

感謝您可以提供任何幫助!

+1

而不是讓一個字符,並創造新的沒有第一個字符的字符串,你可以迭代字符串來處理char字符後的字符。它更有效率。我的意思是:'對於測試中的char:sum + = int(char)'而不是'while test:...'。 – GingerPlusPlus

+0

謝謝,我也會試一試。 – Abraxas

回答

3

你的問題是每行結尾處的換行符(例如./n或/ r/n)。

改變這一行:

for test in test_cases: 

這個分裂出來的新行:

for test in test_cases.read().splitlines(): 
+0

太棒了,就是這樣!非常感謝。 – Abraxas

0

試試這個代碼:使用上下文管理

tot = 0 
with open(sys.argv[1], 'r') as f: 
    for line in f: 
     try: 
      tot += int(line) 
     except ValueError: 
      print "Not a number" 

print tot 
  • with...)該文件將自動關閉d。
  • 鑄造int過濾任何空的或無效的值

可以替代print與任何其他說法最適合你(raisepass取決於你的目標)

相關問題