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

Python 从字符串中删除第一个字符,python,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 % 1

我正在进行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

谢谢你能提供的任何帮助

您的问题是每行末尾的换行符(例如/n或/r/n)

更改此行:

for test in test_cases:
要拆分换行符,请执行以下操作:

for test in test_cases.read().splitlines():
请尝试以下代码:

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
  • 使用上下文管理器(
    与…
    )自动关闭文件
  • 强制转换为
    int
    过滤任何空值或无效值

你可以用任何其他最适合你的语句代替
print
raise
pass
取决于你的目标)

太棒了,就是这样!非常感谢。您不需要获取一个字符而创建没有第一个字符的新字符串,您可以在字符串上迭代以逐字符处理它。更有效。我的意思是:
对于test:sum+=int(char)
中的char,而不是test:…中的
。谢谢,我也会尝试一下。