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

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. Как мне это сделать?

Спасибо

4b9b3361

Ответ 1

Во-первых, потеряйте этот абсурдный призыв к int - который отнимает вас дальше от того, что вы хотите, так что, что когда-либо позволяло вам вставлять его?! Изменение:

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

к более простой

inp = input("Enter a number:")

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

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

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

n = n + i;

который, помимо совершенно абсурдной (но безобидной) точки с запятой, пытается суммировать символ я с целым числом n - это не сработает! Итак, этот становится

n = n + int(i)

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

Ответ 2

попробовать:

for i in str(inp):

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

Ответ 3

Ну, вы хотите обработать строку, представляющую число, итерацию по цифрам, а не само число (это абстрактный объект, который может быть написан по-разному, например "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).

Ответ 4

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

print sum(int(digit) for digit in raw_input('Enter a number:'))

Ответ 5

Возможно, вы пытаетесь

for i in range(inp)

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

Ответ 6

Операторы

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

Ответ 7

Как уже упоминалось ghills

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

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

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

Ответ 8

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

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

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

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)

Ответ 9

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

Ответ 10

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

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