我不确定如何解决“持久性错误”问题的代码。目标是创建一个称为“持久性”的函数,以返回迭代次数,直到数字的位数相乘等于一位数字为止。

例如: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...

最佳答案

您会注意到,如果您想对3927做同样的事情,则会重复代码。在这种情况下,递归可以提供帮助(调用函数本身):

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/

10-16 07:30
查看更多