我试过这个,但它不起作用。
def sumDigits(n):
if n == 0:
print 0
else:
print n%10 + sumDigits(n/10)
sumDigits(35)
答案 0 :(得分:2)
如果您使用的是Python 3.x,请注意您需要使用/
执行整数除法,因为float
将执行return
(true)除法,即使有两个整数。
在任何情况下,该函数都需要print
个值,而不仅仅是def sumDigits(n):
if n == 0:
return 0
else:
return n%10 + sumDigits(n//10)
。
>>> sumDigits(35)
8
然后它将按预期工作
{{1}}
答案 1 :(得分:1)
这是一个适用于所有长度的数字(和字符串!)的解决方案。
def sumDigits(n):
n = str(n)
if n is "":
# Base Case: Return 0 when there is nothing left
return 0
else:
# Default Case: Return the first number + sum of the rest)
return int(n[0]) + sumDigits(n[1:])
>>> print sumDigits(359)
>>> 17
当写出来时,它将如下所示:
sumDigits(359)= 3 + sumDigits(59)= 3 + 5 + sumDigits(9)= 3 + 5 + 9 + 0
答案 2 :(得分:0)
您需要返回值而不是打印值。
试试这个:
def sumDigits(n):
if n == 0:
return 0
else:
return n%10 + sumDigits(n//10)
>>> sumDigits(41)
5
>>> sumDigits(31)
4
当n为0时,您还可以使用and
运算符来利用相等性检查。
def sumDigits(n):
return n and n%10 + sumDigits(n//10)
此处,n%10 + sumDigits(n//10)
仅在n
非零时才会被评估。
使用//
,因为它给出了除法小数点后面的数字的除数。
答案 3 :(得分:0)
当您尝试进行递归调用sumDigits( n / 10)
时,它希望返回一个值。如果由于函数没有返回任何内容而无法获得该值,则会收到错误。
这可能很有用:Python Functions