2015-12-13 10 views
2

Im получаю ошибку:Python добавление целых чисел в строке

>>> sum_digits(123) 
Traceback (most recent call last): 
    File "<pyshell#16>", line 1, in <module> 
    sum_digits(123) 
    File "D:/Python/Final/#4.py", line 4, in sum_digits 
    for i in n: 
TypeError: 'int' object is not iterable 
>>> 

def sum_digits(n): 
    s = 0 
    for i in n: 
     s += n 
return s 
+0

Показать полный обзор. BTW, сообщение об ошибке и код не совпадают: 'for i in int (n)', 'for i in n' – falsetru

+0

sum_digits (123) Traceback (последний последний звонок): Файл« », строка 1, в sum_digits (123) Файл "D: /Python/Final/#4.py", линия 4, в sum_digits для I в п: TypeError: 'INT' объект не итерацию >>> – jpotty

+0

Добро пожаловать переполнение стека! Есть люди, которые пытались ответить на ваш вопрос. Если бы это помогло вам, вы можете рассказать об этом сообществу, приняв ответ [http://meta.stackoverflow.com/a/5235], который был наиболее полезен для вас. – falsetru

ответ

2

Вам нужно преобразовать число в str (не int) и перебирать его:

def sum_digits(n): 
    s = 0 
    for i in str(n): 
     s += int(i) 
    return s 

использование:

>>> sum_digits(123) 
6 

Использование sum и generator expression:

def sum_digits(n): 
    return sum(int(i) for i in str(n)) 
    # OR return sum(map(int, str(n))) 
0

Если вы хотите i пробегать в цифры из n, вам нужно что-то вроде:

for i in [int(x) for x in str(n)]: 

Или, вы можете просто передать "123" вместо 123 - sum_digits, о чем вы намереваетесь назвать название своего сообщения. Конечно, тогда вам нужно будет преобразовать каждый символ в его числовое значение.

2

Проблема заключается в том, что вы передаете int вашей функции, которую вы не можете перебрать.

Я предлагаю решение

>>> n = 123 
>>> sum(int(x) for x in str(n)) 
6 
+0

Несмотря на то, что это хороший однострочный шрифт, я бы предпочел в противном случае, этот человек, кажется, новичок, который просто экспериментирует с языком. Этот синтаксис казался бы незнакомым. –

0

Вы не можете перебирать в Int, но вы можете сделать это без приведения к str:

def sum_digits(n): 
    n, i = divmod(n, 10) 
    while n: 
     n, r = divmod(n, 10) 
     i += r 
    return i 

Демо:

In [2]: sum_digits(123456789) 
Out[2]: 45 

In [3]: sum_digits(123) 
Out[3]: 6 

In [4]: sum_digits(100) 
Out[4]: 1 

Это делает не имеет смысла конвертировать из int в str, а затем обратно в int снова.

Смежные вопросы