1

我正在编写一个程序来从表单的单行输入中添加两个数字:

号码 + 其他号码

我不断收到“字符串索引必须是整数”错误,但是当我对所有索引调用 type 时,它​​们都显示为整数。

我该如何解决?这是代码

S = input()
for position in range(0, len(S)):
   if '+'== position:
     break
a=int(position)
Sum = (S[0,a])+(S[a, len(S)])
print(Sum)
#print(position)   
#print(type(position))
#print(type(len(S)))
#print(type(0)) 
4

3 回答 3

7

眼前的问题

您可能打算使用S[0:a]S[a:len(S)](切片)而不是逗号。

关于切片的注意事项...

您不必在len(S)此处指定前导零或尾随 - 它们是隐含的。所以你可以用S[:a]S[a:]来表示同样的意思。

另请注意,S[0:a] + S[a:len(S)]相当于S. 您可能不想在+其中包含 ,因此您可能想S[a+1:len(S)]改用。

关于在字符串中查找字符位置的另一个注意事项

您不需要手动循环索引 - 已经有.index()字符串的方法可以做到这一点:

>>> "hello".index("e")
1

实现总体目标的更简单方法

您可以只使用该split()函数来获取由字符分隔的字符串部分+

S = input()
number_strings = S.split('+')
numbers = [int(n) for n in number_strings]
print sum(numbers)

作为奖励,这将适用于任意数量的数字 -1+2+3会起作用,就像4.

第三行使用所谓的列表推导来对列表的每个元素进行操作并生成一个新元素——在这种情况下,获取一个字符串列表并制作一个整数列表。

第四行利用了 Python 的内置sum()函数,它会自动返回一系列项目的总和。

请注意,您还可以压缩上述行:

print sum(int(n) for n in input().split('+'))

这是一种更整洁的形式;我只是在上面隔开,以便更容易解释。

于 2012-12-24T21:17:31.030 回答
0

0, a是一个元组。您的意思是通过 对序列进行切片S[0:a]吗?

于 2012-12-24T21:17:16.397 回答
0

您需要将 , 修改为:

Sum = (S[0:a])+(S[a: len(S)])
于 2012-12-24T21:19:48.917 回答