3 回答

TA貢獻1828條經(jīng)驗 獲得超3個贊
您沒有在 else 子句中返回任何值,因此它給出 None
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)
更具可讀性的形式是:
def root(n):
d_sum = 0
for i in str(n):
d_sum += int(i)
if dsum<10:
return d_sum
return root(d_sum)
沒有遞歸:
def root(n):
while n > 9:
n = sum(map(int, str(n)))
return n

TA貢獻1865條經(jīng)驗 獲得超7個贊
除了缺少 之外return
,您還沒有查找簡化的封閉式算法:
return 9 if (r % 9 == 0) else (r % 9) # Parentheses are unneeded, but added for readability
數(shù)字和的“老派”名稱是“casting out nines”。您采用該數(shù)字的?;鶖?shù)b-1
,其中b
是原始數(shù)字基數(shù)。十進制為 9,十六進制為 15,等等。

TA貢獻1765條經(jīng)驗 獲得超5個贊
我不確切知道您想要實現(xiàn)什么,但我猜您想返回遞歸調(diào)用的結(jié)果,因此將示例的最后一行更改為:
return digital_root(r)
- 3 回答
- 0 關(guān)注
- 164 瀏覽
添加回答
舉報