我需要使用 Python 获得一个正数的数字根,到目前为止我的算法不起作用。
理论上,每个数字的数字应该相加,直到数字只剩下1个数字。
例如:
127 = 1+2+7 = 10
1+0 = 1
因此 127 的数字根是1
.
这是我的最后一个算法:
def getDigitalRoot(num):
return num if num==9 else num%9
但它不能很好地工作,因为如果我输入例如 99 它返回 0 并且它必须是 9。
我需要使用 Python 获得一个正数的数字根,到目前为止我的算法不起作用。
理论上,每个数字的数字应该相加,直到数字只剩下1个数字。
例如:
127 = 1+2+7 = 10
1+0 = 1
因此 127 的数字根是1
.
这是我的最后一个算法:
def getDigitalRoot(num):
return num if num==9 else num%9
但它不能很好地工作,因为如果我输入例如 99 它返回 0 并且它必须是 9。
使用递归函数,您可以执行以下操作:
它首先做的是通过将整数转换为字符串来计算所有数字的总和:
然后每个数字都被转换回一个整数,并与函数相加
sum
:验证结果为一位数
suma < 10
(更新
使用@Darkhogg 的建议,我将列表理解更改为生成器,它只影响总和行。更改自:
A:
我找到了一种非常优雅的方式来获得我想要的东西:
通过这种方式,我解决了我在输入 99 时遇到的问题,在它返回 0 之前,现在它正确地给了我 9。
这个问题可以在没有递归的情况下通过使用reduce内置函数以及在 Python 中字符串像列表一样可迭代的事实来解决。
结果
127 的数字根是 1 而不是 10(出现在问题中):
n 的数字根等于 n 除以 9 的余数 dr(n)= n mod 9
这在
https://www.todoexpertos.com/preguntas/63pngi45njkno6f3/cual-es-el-procedimiento-que-permite-expresar-la-raiz-digital-por-medio-de-la-funcion-parte-entera-piso
唯一的缺点是如果 n 是 9 的倍数,n mod 9 = 0 并且我们想要 9 出来。这可以通过函数解决
博士(n) = (n - 1) mod 9 + 1
在 Python 中,这将是 def getDigitalRoot(num): return (num-1)%9 +1