def sum_digits(n):
if n < 0:
raise ValueError("The number must be higher or equal to 0")
num = sum([int(i) for i in str(n)])
if str(num) == 1:
return num
else:
return sum_digits(num)
如果我尝试print(sum_digits(854))
,我会得到以下错误:
RecursionError: maximum recursion depth exceeded while getting the str of an object
我试着进入那个代码,但对我来说,那个代码是完全合法的。那个代码怎么了?
您的代码总是计算为False,并递归调用函数。
>>> n = 1
>>> str(n) == 1
False
将其更改为
if num == 1:
return num
else:
return sum_digits(num)
这从来都不是真的:
str(num) == 1
为什么不只是
num == 1
但它仍然不起作用。如果您使用4
输入,它将保持4
,并且永远不会得到一个。也许使条件num < 10
。。。这取决于你想要实现的目标。
以下是该代码的其他一些方法。第一,迭代风格:
def sum_digits(n_in):
n_out = 0
for s_chr in str(n_in):
n_out += int(s_chr)
return n_out
n = sum_digits(854)
print(n)
然后功能风格:
from functools import reduce
n_sum = reduce(lambda n_ca, s_it: n_ca + int(s_it), str(854), 0)
print(n)