【发布时间】:2021-06-24 15:04:47
【问题描述】:
我正在编写this codewars 问题的解决方案,但是我遇到了一些问题。
问题陈述:
编写一个函数
persistence,它接受一个正参数num并返回其乘法持久性,这是您必须将num中的数字相乘直到达到一个数字的次数,例如:
persistence(39)# 返回 3,因为 39=27, 27=14, 1*4=4 和 4 只有一位数
def persistence(n, t=1, x=0):
if len(str(n)) > 1:
number = [int(i) for i in str(n)]
for i in number:
t = t * i
if len(str(t)) > 1:
x += 1
return(persistence(t,x))
else:
return(x)
else:
return 0
我无法弄清楚这段代码中的错误是什么。我的直觉是,要么是参数错误,要么是 return() 值的放置方式。
本质上,将整数提取为倍数的代码是正确的,所以我只是在持久性中添加了一个额外的参数;设置 x = 0 并使其每次满足 if 条件时都会增加确切的 x 值。一旦数字被蒸馏出来,只需输出 x。然而,它继续简单地输出 0 作为最终答案。这里有什么问题?
编辑:解决方案在 cmets 中,没有意识到参数是如何传递的。正确的版本是:
return(persistence(t,1,x))
还必须设置 x = 1 才能使逻辑在代码战上运行。
【问题讨论】:
-
return(persistence(t,x))你知道t将作为n参数传递,x将作为t传递吗? -
@JohnGordon 啊,我怀疑这与参数有关。我知道 t 作为 n 传递,因为代码需要这样做,但我没想到以下参数也会按顺序排列。我假设正确的版本是 persistence(t,1,x)
-
t应该是一个局部变量而不是一个参数。而不是使用x,您可以只使用return 1 + persistence(t)。