如何完成我的Python代码来解决“持久性问题”?

2024-05-23 22:07:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我不知道如何完成我的代码来解决“持久性问题”。目标是创建一个名为“persistence”的函数来返回迭代次数,直到一个数的位数相乘等于一个位数。在

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

Tags: 函数代码in目标fordef持久性次数
2条回答

TerryA的回答非常好,当你想再次将一个函数的结果应用于同一个函数时(如本例所示),递归通常是一个非常好的主意。不过,为了完整性起见,可以使用一个简单的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)

计数器会记录循环运行的次数,从而给出最终答案。在

您会注意到,如果您想像对39到{}所做的那样,您将重复代码。在这种情况下,递归可以帮助(调用函数本身):

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. 我们重复,直到得到一个4(1*4)的total。在
  7. 我们称之为persistence(4),但它返回0,因为4<;10。没有对数字4进行迭代(因此我们返回0
  8. 此时,递归已经停止。Python现在回溯所有以前的调用。它加0+1+1+1得到3。在

递归一开始有点棘手,但基本上它是一个调用自己的函数,但它有“基本情况”来停止函数的无限期运行。在这种情况下,我们的基本情况是如果数字小于10(它有一个数字)。此数字上没有迭代。在

相关问题 更多 >