从字符串中删除第一个字符

时间:2014-12-19 17:58:40

标签: python

我正在研究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

感谢您提供的任何帮助!

2 个答案:

答案 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替换为最适合您的任何其他声明(raisepass,具体取决于您的目标)