3

假设我有

num = 123456

我如何获得21的数字总和?如何使用 sum() 函数?我试过 sum(num) 但它说'int'对象不可迭代。

4

4 回答 4

13

您必须先将其更改为字符串:

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
于 2013-04-28T18:19:43.730 回答
8

单程:

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
于 2013-04-28T18:24:40.523 回答
3

你可以这样做:

sum(map(int,list(str(num))))  #sum contains your digits string

str(num) 返回您的数字的字符串版本, list(...) 从您的字符串中创建一个列表(char by char), map(int,string) 将整数转换应用于您的列表。现在您的列表包括您的数字的所有单个整数,因此您可以使用 sum() 函数。

于 2013-04-28T18:38:59.527 回答
1

这个怎么样:

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
于 2013-04-28T18:29:37.023 回答