2016-02-13 55 views
3

我正在尝试创建一个长计算计算器(没有长除法,加法等),而在长分区部分我试图让数字但我不能(如在numdiv)TypeError:字符串索引必须是数字,而不是对象(Python)

例如:在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 

的错误是从那里我做了

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

它说

TypeError: string indices must be numbers, not object 

我试图结束5线做

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:i]'''来表示一系列索引,而不是[0,i]。不过,当我复制它时,我得到它“不是元组”而不是“不是对象”... – limasxgoesto0

+0

你不是正确地索引字符串。我不确定你想要做什么,但索引格式是[开始:停止:步骤],现在它认为你试图索引一个列表,因此错误。 – user3014097

+0

这[教程](http://pythoncentral.io/cutting-and-slicing-strings-in-python/)应该给你一个关于如何分割字符串以及切片可以做什么的好主意。 –

回答

1

With 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] 

这不相同。

相关问题