我不确定如何解决“持久性错误”问题的代码。目标是创建一个称为“持久性”的函数,以返回迭代次数,直到数字的位数相乘等于一位数字为止。
例如:persistence(39)= 3,因为3 * 9 = 27、2 * 7 = 14和1 * 4 = 4;因此,三个迭代。
下面是到目前为止的代码,我不确定从这里开始应该走什么路,或者我是否正确。任何帮助,将不胜感激。
def persistence(num):
num_str = str(num)
total = 1
for i in num_str:
total = total * int(i)
while len(str(total)) <> 1:
total = total * total(i)
#not sure what to do from here...
最佳答案
您会注意到,如果您想对39
到27
做同样的事情,则会重复代码。在这种情况下,递归可以提供帮助(调用函数本身):
def persistence(num):
if num < 10:
return 0 # Only one digit. Can't iterate over it
num_str = str(num)
total = 1
for i in num_str:
total = total * int(i)
return 1 + persistence(total) # We do 1 + because we just did an iteration
假设输入为
39
:39不小于10,所以我们进入下一个阶段。
我们使用您提供的相同代码来获得数字相乘的总和
现在,我们在
total
处分配了一个新数字(27)。我们通过再次调用该函数来重复上面的代码,但是没有传递39,而是传递了27。27不小于10,所以我们进入下一阶段
我们得到数字的乘法
重复直到得到
total
为4(1 * 4)。我们将其称为persistence(4),但它会返回
0
,因为4 0)此时,递归已停止。 Python现在回溯了以前的所有调用。它将0 +1 +1 +1加到3。
递归起初有点麻烦,但是基本上它是一个可以自我调用的函数,但是它具有“基本情况”来无限期停止该函数的运行。在这种情况下,我们的基本情况是该数字小于10(具有一位数字)。此数字上没有迭代。
关于python - 如何完成“持久性漏洞”的Python代码?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47147136/