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. Как мне это сделать?
Спасибо
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. Как мне это сделать?
Спасибо
Во-первых, потеряйте этот вызов 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
и так далее.
может ты пытаешься
for i in range(inp)
Это напечатает ваше входное значение (inp) раз, чтобы напечатать его только один раз, выполните: for i in range(inp - inp + 1 ) print(i)
У меня просто была эта ошибка, потому что я не использовал range()
пытаться:
for i in str(inp):
Это будет перебирать символы в строковом представлении. Когда у вас есть каждый символ, вы можете использовать его как отдельный номер.
Ну, вы хотите обработать строку, представляющую число, перебирая цифры, а не само число (которое является абстрактной сущностью, которую можно записать по-разному, например, «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 а>).
Примечание: если вы хотите получить сумму всех цифр, вы можете просто сделать
print sum(int(digit) for digit in raw_input('Enter a number:'))
Операторы for .. in
предполагают, что вы будете использовать тип, для которого определен итератор. Простой тип int не имеет итератора.
Как гиллы уже упоминали
inp = int(input("Enter a number:"))
n = 0
for i in str(inp):
n = n + int(i);
print n
Когда вы перебираете что-то, ключевое слово «IN», просто всегда думайте об этом как о списке чего-то. Вы не можете перебрать простое целое число. Следовательно, он не является итерируемым.
Возьмите свой ввод и убедитесь, что это строка, чтобы она была итерируемой.
Затем выполните понимание списка и измените каждое значение обратно на число.
Теперь вы можете сделать сумму всех чисел, если хотите:
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)
Вы можете попробовать изменить for i in inp:
на for i in range(1,inp):
Итерация не работает с одним целым. Вместо этого вам нужно указать диапазон для его запуска.
Не делайте его int()
, но сделайте его range()
, чтобы решить эту проблему.
inp = range(input("Enter a number: "))
Один из возможных ответов на вопрос ОП («Я хотел узнать сумму, добавляя каждую цифру, например, 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