Python 查找数字的数字根

Python 查找数字的数字根,python,algorithm,Python,Algorithm,我试图实现一个函数,该函数发现一个数字的数字根是一个数字中所有数字的递归和。但由于某些原因,如果函数对自身进行递归调用,则返回none import functools def digital_root(n): r=functools.reduce(lambda x,y:int(x)+int(y),list(str(n))); if r//10<1: return r else: digital_root(r) 在else子句中没有返回任何值,因此它不提供任何值

我试图实现一个函数,该函数发现一个数字的数字根是一个数字中所有数字的递归和。但由于某些原因,如果函数对自身进行递归调用,则返回none

import functools
def digital_root(n):
  r=functools.reduce(lambda x,y:int(x)+int(y),list(str(n)));
  if r//10<1:
   return r
  else:
   digital_root(r)

在else子句中没有返回任何值,因此它不提供任何值

def digital_root(n):
  r=functools.reduce(lambda x,y:int(x)+int(y),list(str(n)));
  if r//10<1:
   return r
  else:
   return digital_root(r)

我不知道您到底想实现什么,但我猜您希望返回递归调用的结果,因此将示例的最后一行更改为:

返回数字信号发生器
除了缺少返回,您还没有查找简化的封闭形式算法:

return 9 if (r % 9 == 0) else (r % 9)
# Parentheses are unneeded, but added for readability

数字总和的老校名是“九”;取数字的模基b-1,其中b是原始的数字基。9表示十进制,15表示十六进制等。

这是基于数学的reduce functionNice变通解决方案所必需的。不适合编程作业,但这取决于作业规格。递归只是作为数字根的一个定义,而不是一个实现要求。我给了你一个+1来说明它,但以189为例,这并不是完美的尝试。第4000个答案快乐!所有9的倍数都会使这种方法失败。为该案例的答案添加了编辑
def root(n):
    while n > 9:
        n = sum(map(int, str(n)))
    return n
return 9 if (r % 9 == 0) else (r % 9)
# Parentheses are unneeded, but added for readability