如何总结数字位数?

时间:2020-09-23 09:29:21

标签: python recursion sum digits

我在Python中具有此功能,可以帮助我找到数字的总和:

def sum01(n):
    if n < 9 and n > 0:
        return n
    elif n > 9:
        s = sum01((n%10)+(n//10))
        return s
    else:
        return "ERROR, only natural numbers (N)!"

    print(sum01(22224))

此函数给出的结果是:

3

但是,我希望看到的结果是:

12

我想使用递归函数而不使用whilefor循环且没有列表,但是没有列表。但是,我一直没有这样做。

谢谢!

我无法添加一直在寻找的解决方案作为答案,所以这里就是问题所在。

`def sum01(n):
   x = 0
   if n < 9 and n > 0:
       return n
   elif n > 9:
       x = (n%10) + x
       s = sum01(n//10)
       return s + x
   else:
       return "ERROR, only natural numbers (N)!"`

1 个答案:

答案 0 :(得分:3)

这不是最佳或性能最高的解决方案,但是如果您只需要快速完成,它就很短:

sum_of_digits = 0
for digit in str(22224):
  sum_of_digits += int(digit)

如果您想给某人留下深刻的印象,也可以使用此“一个衬里”:

from functools import reduce
reduce(lambda a, b: int(a) + int(b), str(22224))

但是@ekhumoro解决方案甚至更好(请参阅评论)。

无论如何,这有点像递归的减少,不涉及循环:

def sum_of_digits(sum, digits):
    sum += int(digits.pop())
    if len(digits) == 0:
        return sum
    return sum_of_digits(sum, digits)

print(sum_of_digits(0, list(str(22224))))

我想这比较干净:

def sum_of_digits(sum, number):
    if number == "":
        return sum
    digits = str(number)
    return sum_of_digits(sum + int(digits[0]), digits[1:])

print(sum_of_digits(0, 22224))
相关问题