Python 从字符串中删除第一个字符
我正在进行CodeEval挑战,并有一个问题的解决方案,该问题将数字列表作为输入,然后输出每行数字的总和。以下是我的代码,以确保您理解我的意思: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
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:…中的。谢谢,我也会尝试一下。