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]
>>>
Кроме того, я хотел рассмотреть две вещи:
- В вашем заявлении 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
>>>