如何为#34;持久性bugger&#34 ;?完成我的Python代码?

时间:2017-11-06 22:48:16

标签: python python-3.x

我不确定如何为"持久性bugger"完成我的代码。问题。目标是创建一个名为" 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...

2 个答案:

答案 0 :(得分:2)

您会注意到,如果您想对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

  1. 39不低于10,所以我们进入下一阶段。
  2. 我们使用您提供的相同代码来获取乘以数字的总数
  3. 我们现在在total分配了一个新号码(27)。我们通过再次调用函数重复上面的代码,但不是通过39,而是通过27​​。
  4. 27不低于10,所以我们进入下一阶段
  5. 我们得到数字乘法
  6. 我们重复,直到得到total的4(1 * 4)。
  7. 我们称之为持久性(4),但它返回0,因为4&lt; 10.没有对数字4进行迭代(因此我们返回0
  8. 此时,递归已停止。 Python现在回溯所有以前的调用。它增加0 + 1 + 1 + 1给3。
  9. 首先,递归有点棘手,但基本上它是一个自称的函数,但它有基本情况&#34;停止无限期运行的功能。在这种情况下,我们的基本情况是数字小于10(它有一位数)。此编号不会进行迭代。

答案 1 :(得分:0)

TerryA的回答非常好,当你想继续将函数的结果应用于同一个函数时(如本例所示),recursionion通常是一个非常好的主意。仅仅为了完整起见,解决方案可以通过简单的while循环实现,与您尝试过的方式不太相似:

def persistance(num):
    counter=0
    while num>9:
        counter+=1
        num_str=str(num)
        total=1
        for i in num_str:
            total=total* int(i)
        num=total
    print (counter)

计数器会跟踪循环运行的次数,从而为您提供最终答案。