TypeError:字符串索引必须是数字,而不是对象(Python)

时间:2016-02-13 00:58:38

标签: python

我正在尝试创建一个长计算计算器(做长除法,加法等),而在长除法部分我试图得到数除以但我不能(如numdiv)< / p>

Ex:在240/12中,我试图找到的数字是24,然后我会有另一个循环,它将添加12来查找2(如24/12中的2)。

这是我的代码:

##############
#number is bigger (or equal) to number 2

number = 19000
operation = '/'
number2 = 12

##############

import math

longer = len(str(number))
shorter = len(str(number2))
if operation == '/':
    print str(number2) + '/' + str(number)
for i in range(longer - 1):
    if int(str(number)[0, i]) >= number2:
        numdiv = int(str(number)[0, i])
for i in range(1, math.trunc(numdiv / number2)):
    if number2 * (i + 1) >= numdiv:
        print (shorter + 1) * ' ' + number * i

错误是从我做的那一行开始的5行

if int(str(number)[0, i]) >= number2:

它说

TypeError: string indices must be numbers, not object

NEW

我试过

if str(number)[:i] >= number2:
        numdiv = str(number)[:i]
for i in range(1, math.trunc(numdiv / number2)):
    if number2 * (i + 1) >= numdiv:
        print (shorter + 1) * ' ' + number * i
在这种情况下,

numdiv试图成为一个整数,这样做会导致问题:

ValueError: invalid literal for int() with base 10: ''

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用somestring[0, i],您尝试使用元组索引到字符串。

证明:

>>> class mystr(str):
...     def __getitem__(self, x):
...         print(x, type(x))
... 
>>> f = mystr('foo')
>>> f[0, 1]
((0, 1), <type 'tuple'>)

尝试使用除整数之外的任何内容索引字符串将为您提供TypeError

如果您希望将字符串中的切片放到i位置,请使用

str(number)[0:i]

或只是

str(number)[:i]

也是如此。