如何解决此处的递增继续返回 0 值
我正在编写 this 代码战问题的解决方案,但遇到了一些问题。
问题说明:
编写一个函数 persistence
,它接受一个正参数 num
并返回它的乘法持久性,它是您必须乘以 num
中的数字直到达到一个数字,例如:
persistence(39)
# 返回 3,因为 39=27,27=14,1*4=4 and 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 作为最终答案。这里有什么问题?
编辑:解决方案在评论中,没有意识到参数是如何传递的。正确的版本是:
return(persistence(t,1,x))
还必须设置 x = 1 才能在代码战上工作。
解决方法
通过两个更改的所有测试用例:
-
您没有每次都用新的
n
更新您的t
-
您的 x 每次都被设置为 0。那应该在开始时设置为 1(默认值)
def persistence(n,t=1,x=1): 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(n=t,x=x)) else: return (x) else: return 0
实际上,您可以在不需要参数t
和n
的情况下编写它。只需一个 n
即可,如下所示:
def persistence(n,x=1):
if len(str(n)) > 1:
number = [int(i) for i in str(n)]
t = 1
for i in number:
t = t * i
if len(str(t)) > 1:
return x + (persistence(n=t,x=x))
else:
return (x)
else:
return 0
,
我认为您的函数参数没有按照您的预期工作。
当你调用函数 persistence(t,x)
时,第一个参数 n
应该变成 t
,第二个参数 x
应该变成新的 x
。但是在您的函数中,x
由于其位置而成为新的 t
。
用一堆 print
语句来揭示错误非常有用。
def persistence(n,x=1,t=1):
print('x:',x)
if len(str(n)) > 1:
number = [int(i) for i in str(n)]
for i in number:
t = t * i
print('t:',t)
if len(str(t)) > 1:
x += 1
print('x has changed:',x)
return persistence(t,x)
else:
return x
else:
return 0
print(persistence(39))
print('---------------')
print(persistence(999))
print('---------------')
print(persistence(4))
,
您的代码有两个缺陷:
return(persistence(t,x))
应该
return(persistence(t,1,x))
否则 x 的值将分配给 t,x 将默认为 0。
那么你必须在第一次测试后直接增加x,否则你会错过一次迭代。
另一种计算方法不是切换到字符串,而是用数字来计算:
def persistence(n):
iterations = 0; # no iterations yet
while n > 9: # while n has more than 1 digit:
product = 1 # neutrum for result product
while n > 0: # while there a digit to process:
digit = n % 10 # retrieve the right most digit
product *= digit # do the multiplication
n = n // 10 # cut off the processed digit
iterations += 1 # increment iterations
n = product # let n be the newly calculated product
return iterations # return the result
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。