2016-02-13 3 views
3

Я пытаюсь создать длинный калькулятор вычислений (делает длинное разделение, добавление и т. Д.), А в секции длинного разделения я пытаюсь получить номер разделите, но я не могу (как в numdiv)TypeError: строковые индексы должны быть числами, а не объектом (Python)

Ex: В 240/12 число, которое я пытаюсь найти, равно 24, тогда у меня будет еще один цикл, который добавит 12, чтобы найти 2 (as в 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 

НОВЫЙ

Я пытался

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]. Тем не менее, когда я реплицировал его, я понял, что это «не кортеж» вместо «not object» ... – limasxgoesto0

+0

Вы не индексируете строку правильно. Я не уверен точно, что вы пытаетесь сделать, но форматирование индексации [start: stop: step], прямо сейчас он думает, что вы пытаетесь индексировать список, следовательно, ошибку. – user3014097

+0

Этот [учебник] (http://pythoncentral.io/cutting-and-slicing-strings-in-python/) должен дать вам представление о том, как разрезать строки и что можно сделать с помощью фрагментов. –

ответ

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] 

, который делает то же самое.

Смежные вопросы