字符串索引在python中必须是整数错误,但索引是整数

时间:2012-12-24 21:15:57

标签: python string indices

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

number + othernumber

我一直得到“字符串索引必须是整数”错误,但是当我在所有索引上调用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)) 

3 个答案:

答案 0 :(得分: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一样。

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

第四行利用了Python在sum()函数中的构建,该函数将自动返回一系列项的总和。

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

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

这是一个更整洁的形式;我只是将它分开,以便更容易解释。

答案 1 :(得分:0)

0, a是一个元组。你的意思是通过S[0:a]

代替切片序列

答案 2 :(得分:0)

你需要修改,到:

Sum = (S[0:a])+(S[a: len(S)])