int объект не является итерируемым?

inp = int(input("Enter a number:"))

for i in inp:
    n = n + i;
    print (n)

... выдает ошибку: 'int' object is not iterable

Я хотел узнать сумму, складывая каждую цифру, например, 110. 1 + 1 + 0 = 2. Как мне это сделать?

Спасибо


person eozzy    schedule 21.12.2009    source источник
comment
Если сложить цифры, то получится 110. Я не знаю, откуда взялось 11.   -  person Sasha Chedygov    schedule 21.12.2009
comment
@Trent: en.wikipedia.org/wiki/Unary_numeral_system   -  person configurator    schedule 09.12.2012
comment
stackoverflow.com/questions/14939953 /   -  person user345352353    schedule 13.10.2014


Ответы (11)


Во-первых, потеряйте этот вызов int - вы преобразуете строку символов в целое число, а это не то, что вам нужно (вы хотите рассматривать каждый символ как собственное число). Изменять:

inp = int(input("Enter a number:"))

to:

inp = input("Enter a number:")

Теперь, когда inp представляет собой строку цифр, вы можете перебирать ее цифра за цифрой.

Затем присвойте некоторое начальное значение n -- в том виде, в котором вы сейчас работаете с кодом, вы получите NameError, поскольку вы никогда его не инициализируете. Предположительно, вы хотите n = 0 перед циклом for.

Затем снова рассмотрим разницу между символом и целым числом. Теперь у вас есть:

n = n + i;

который, помимо ненужной точки с запятой (Python — это синтаксис, основанный на отступах), пытается суммировать символ i с целым числом n — это не сработает! Итак, это становится

n = n + int(i)

превратить символ '7' в целое число 7 и так далее.

person Alex Martelli    schedule 21.12.2009

может ты пытаешься

for i in range(inp)

Это напечатает ваше входное значение (inp) раз, чтобы напечатать его только один раз, выполните: for i in range(inp - inp + 1 ) print(i)

У меня просто была эта ошибка, потому что я не использовал range()

person johnjullies    schedule 05.07.2015
comment
Это не сработает. Для функции range() требуется целое число, которое является строкой. - person rhymsy; 07.12.2020

пытаться:

for i in str(inp):

Это будет перебирать символы в строковом представлении. Когда у вас есть каждый символ, вы можете использовать его как отдельный номер.

person Gavin H    schedule 21.12.2009
comment
Хм... пишет TypeError: неподдерживаемые типы операндов для +: 'int' и 'str' - person eozzy; 21.12.2009
comment
конвертировать обратно в int при добавлении? - person Brian R. Bondy; 21.12.2009
comment
Ну, когда вы собираетесь добавить его к целому числу, теперь это строка. Так что в этом случае вы могли бы сказать int(i) + n или что-то в этом роде. - person Gavin H; 21.12.2009

Ну, вы хотите обработать строку, представляющую число, перебирая цифры, а не само число (которое является абстрактной сущностью, которую можно записать по-разному, например, «CX» в римских цифрах или «0x6e» в шестнадцатеричном формате (оба для 110) или что-то другое).

Следовательно:

inp = input('Enter a number:')

n = 0
for digit in inp:
     n = n + int(digit)
     print(n)

Обратите внимание, что n = 0 требуется (где-то перед входом в цикл). Вы не можете взять значение несуществующей переменной (а правая часть n = n + int(digit) принимает значение n). И если n действительно существует в этот момент, он может содержать что-то совершенно не связанное с вашими текущими потребностями, что приводит к неожиданному поведению; вам нужно остерегаться этого.

Это решение не пытается гарантировать, что введенный пользователем ввод действительно является числом. Я оставлю эту проблему на ваше усмотрение (подсказка: все, что вам нужно, есть в руководстве по Python).

person Michał Marczyk    schedule 21.12.2009
comment
Это сработает, отлично, я бы предложил сделать это функцией, если op как знание с inp является глобальной переменной и сохраняет n локальным, поэтому он сбрасывается до нуля, когда делается и снова вызывается - person rhymsy; 07.12.2020

Примечание: если вы хотите получить сумму всех цифр, вы можете просто сделать

print sum(int(digit) for digit in raw_input('Enter a number:'))
person Eric O Lebigot    schedule 21.12.2009

Операторы for .. in предполагают, что вы будете использовать тип, для которого определен итератор. Простой тип int не имеет итератора.

person Brian R. Bondy    schedule 21.12.2009

Как гиллы уже упоминали

inp = int(input("Enter a number:"))

n = 0
for i in str(inp):
    n = n + int(i);
    print n

Когда вы перебираете что-то, ключевое слово «IN», просто всегда думайте об этом как о списке чего-то. Вы не можете перебрать простое целое число. Следовательно, он не является итерируемым.

person CppLearner    schedule 21.12.2009

Возьмите свой ввод и убедитесь, что это строка, чтобы она была итерируемой.

Затем выполните понимание списка и измените каждое значение обратно на число.

Теперь вы можете сделать сумму всех чисел, если хотите:

inp = [int(i) for i in str(input("Enter a number:"))]
print sum(inp)

Или, если вы действительно хотите увидеть вывод во время его выполнения:

def printadd(x,y):
    print x+y
    return x+y

inp = [int(i) for i in str(input("Enter a number:"))]
reduce(printadd,inp)
person Brian    schedule 14.06.2011

Вы можете попробовать изменить for i in inp: на for i in range(1,inp): Итерация не работает с одним целым. Вместо этого вам нужно указать диапазон для его запуска.

person Yaakov Freedman    schedule 02.07.2013

Не делайте его int(), но сделайте его range(), чтобы решить эту проблему.

inp = range(input("Enter a number: "))
person 戴東華    schedule 03.11.2013

Один из возможных ответов на вопрос ОП («Я хотел узнать сумму, добавляя каждую цифру, например, 110. 1 + 1 + 0 = 2. Как мне это сделать?») — использовать встроенную функцию divmod()

num = int(input('Enter a number: ')
nums_sum = 0

while num:
    num, reminder = divmod(num, 10)
    nums_sum += reminder
person Aivar Paalberg    schedule 12.10.2018