问题:“如果一个数字n的所有数字都与乘积相乘,则最后得到的一个数字称为n的乘法数字根。需要相乘才能达到一个数字的次数称为n的乘法持久性。
示例:86 -> 48 -> 32 -> 6 (MDR 6, MPersistence 3)
341 -> 12->2 (MDR 2, MPersistence 2)
使用上一个练习的函数prodDigits()编写函数MDR()和MPersistence(),它们输入一个数字并返回其乘法数字根和
乘法持久性”
no=int(input())
def prodDigits(n):
prod=1
while n>0:
prod=prod*(n%10)
n=n//10
return prod
def mdr(n):
if n<10:
return n
else:
return mdr(prodDigits(n))
def MPersistence(n):
count=0
while():
count=count+1
return count
print(mdr(no))
print(MPersistence(no))
我无法获得如何计算来自MPersistence()函数的mdr()函数调用。我在while循环中尝试了一些条件,但所有条件都会导致无限循环
一般来说,这是不可能的–
MPersistence
只会在之前运行,或在MDR
之后运行。至少需要修改MDR
以跟踪迭代本身,这就产生了如何在两个函数之间安全地交换结果的问题。理想情况下,MPersistence
应该通过独立计算数字乘法链来工作为避免代码重复,请使用一个同时计算数字根和持久性的函数;根据需要,提供方便的函数直接返回每个组件
您不需要另一个函数来计算函数调用。MisterMiyagi的想法是在函数本身内部有一个计数器,并在每次函数调用时返回持久性和数字根,最后解包结果
我认为更简单的方法是将计数器作为全局变量,并在每次调用时增加其在函数中的值:
这种方法看起来更简单,但有一点需要记住:每次调用函数之前都必须初始化计数器:
这不是一个纯函数,因为它依赖并改变非局部变量
相关问题 更多 >
编程相关推荐