объект int не повторяется? - PullRequest
       77

объект int не повторяется?

16 голосов
/ 21 декабря 2009
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. Как мне это сделать?

Спасибо

Ответы [ 11 ]

20 голосов
/ 21 декабря 2009

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

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

до:

inp = input("Enter a number:")

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

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

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

n = n + i;

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

n = n + int(i)

для преобразования символа '7' в целое число 7 и т. Д.

8 голосов
/ 21 декабря 2009

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

for i in str(inp):

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

5 голосов
/ 05 июля 2015

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

for i in range(inp)

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

3 голосов
/ 21 декабря 2009

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

print sum(int(digit) for digit in raw_input('Enter a number:'))
3 голосов
/ 21 декабря 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 ).

1 голос
/ 21 декабря 2009

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

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

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

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

1 голос
/ 21 декабря 2009

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

0 голосов
/ 12 октября 2018

Один из возможных ответов на вопрос ОП («Я хотел узнать сумму, добавив каждую цифру, например, 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
0 голосов
/ 03 ноября 2013

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

inp = range(input("Enter a number: "))
0 голосов
/ 03 июля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...