Python-TypeError: объект 'int' не является итерационным

вот мой код:

import math

print "Hey, lets solve Task 4 :)"

number1 = input ("How many digits do you want to look at? ")
number2 = input ("What would you like the digits to add up to? ")

if number1 == 1:
    cow = range(0,10)
elif number1 == 2:
    cow = range(10,100)
elif number1 == 3:
    cow = range(100,1000)
elif number1 == 4:
    cow = range(1000,10000)
elif number1 == 5:
    cow = range(10000,100000)
elif number1 == 6:
    cow = range(100000,1000000)
elif number1 == 7:
    cow = range(1000000,10000000)
elif number1 == 8:
    cow = range(10000000,100000000)
elif number1 == 9:
    cow = range(100000000,1000000000)
elif number1 == 10:
    cow = range(1000000000,10000000000)

number3 = cow[-1] + 1

n = 0
while n < number3:
    number4 = list(cow[n])
    n += 1

Я ищу, чтобы сделать цикл, так что для каждого элемента в списке он будет разбит на каждый из его символов. Например, скажите число 137 был в списке, то он будет превращен в [1,3,7]. Затем я хочу добавить эти числа вместе (я еще не начал этот бит, но у меня есть некоторое представление о том, как это сделать).

однако я продолжаю получать сообщение об ошибке

TypeError: 'int' object is not iterable

когда я пытаюсь запустить этот.

что я делаю не так?

1 ответов


ваша проблема в этой строке:

number4 = list(cow[n])

он пытается забрать cow[n], который возвращает целое число и делает его списком. Это не работает, как показано ниже:

>>> a = 1
>>> list(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>

возможно, вы хотели поставить cow[n] внутри список:

number4 = [cow[n]]

посмотреть демонстрацию ниже:

>>> a = 1
>>> [a]
[1]
>>>

кроме того, я хотел обратиться к двум вещам:

  1. ваш while-statement отсутствует : в конец.
  2. считается очень опасным использовать input как это, так как он оценивает его ввод как реальный код Python. Было бы лучше здесь использовать raw_input а затем преобразовать входные данные в целое число с int.

чтобы разделить цифры, а затем добавить их, как вы хотите, я бы сначала сделал число строкой. Затем, поскольку строки являются итерационными, вы можете использовать sum:

>>> a = 137
>>> a = str(a)
>>> # This way is more common and preferred
>>> sum(int(x) for x in a)
11
>>> # But this also works
>>> sum(map(int, a))
11
>>>