Подтвердить что ты не робот

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

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

Что я делаю неправильно?

4b9b3361

Ответ 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]
>>>

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

  • В вашем заявлении while отсутствует : в конце.
  • Считается очень опасным использовать 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
>>>