我正在研究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:基数为10的int()的无效文字:''""
示例输入是一个文本文件,如下所示:
3011
6890
8778
1844
42
8849
3847
8985
5048
7350
8121
5421
7026
4246
4439
6993
4761
3658
6049
1177
感谢您提供的任何帮助!
答案 0 :(得分:3)
您的问题是每行末尾的换行符(例如/ n或/ r / n)。
更改此行:
for test in test_cases:
将其分成新行:
for test in test_cases.read().splitlines():
答案 1 :(得分: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...
),文件将自动关闭。int
过滤任何空值或无效值您可以将print
替换为最适合您的任何其他声明(raise
或pass
,具体取决于您的目标)