我不确定如何为"持久性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...
答案 0 :(得分:2)
您会注意到,如果您想对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
:
total
分配了一个新号码(27)。我们通过再次调用函数重复上面的代码,但不是通过39,而是通过27。total
的4(1 * 4)。0
,因为4&lt; 10.没有对数字4进行迭代(因此我们返回0
)首先,递归有点棘手,但基本上它是一个自称的函数,但它有基本情况&#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)
计数器会跟踪循环运行的次数,从而为您提供最终答案。