Как получить цифровую сумму в python

Скажем, у меня есть

num = 123456 

Как получить цифру, которая равна 21? Как использовать функцию sum ()? Я попробовал sum (num), но он говорит, что объект «int» не является итерируемым.

В одну сторону:

 In [1]: num=123456 In [2]: sum(map(int,str(num))) Out[2]: 21 In [3]: def digitsum(x): ...: return sum(map(int,str(x))) ...: In [4]: digitsum(num) Out[4]: 21 

Вы должны сначала перенести его на строку:

 In [24]: num = 123456 In [25]: sum(int(x) for x in str(num)) Out[25]: 21 

Без преобразования в строку:

 def solve(n): summ=0 while n: summ+= n%10 n/=10 return summ ....: In [38]: solve(123456) Out[38]: 21 

вы можете сделать это следующим образом:

sum (map (int, list (str (num)))) (сумма содержит вашу строку цифр)

str (num) возвращает строчную версию вашего номера, list (…) делает список из вашей строки (char by char), map (int, string) применяет целочисленное преобразование в ваш список. Теперь ваш список включает в себя все одиночные целые числа вашего номера, поэтому вы можете использовать функцию sum ().

Как насчет этого:

 def f(num): result = 0 base = 10 pos = 10 while pos <= num*base: prev = pos/base result = result + int( (num % pos)/ prev) pos = pos*base return result