Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,从另一个函数中找不到函数出现的次数_Python_Python 3.x_Python 2.7 - Fatal编程技术网

在python中,从另一个函数中找不到函数出现的次数

在python中,从另一个函数中找不到函数出现的次数,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,问题:“如果一个数字n的所有数字都与乘积相乘,则最后得到的一个数字称为n的乘法数字根。需要相乘才能达到一个数字的次数称为n的乘法持久性。 示例:86->48->32->6(MDR 6,MPersistence 3) 341->12->2(MDR 2,MPersistence 2) 使用上一个练习的函数prodDigits()编写函数MDR()和MPersistence(),它们输入一个数字并返回其乘法数字根和 乘法持久性” 否=int(输入()) 数字(n): prod=1 当n>0时: 产品

问题:“如果一个数字n的所有数字都与乘积相乘,则最后得到的一个数字称为n的乘法数字根。需要相乘才能达到一个数字的次数称为n的乘法持久性。 示例:
86->48->32->6(MDR 6,MPersistence 3)

341->12->2(MDR 2,MPersistence 2)
使用上一个练习的函数prodDigits()编写函数MDR()和MPersistence(),它们输入一个数字并返回其乘法数字根和 乘法持久性”


否=int(输入())
数字(n):
prod=1
当n>0时:
产品=产品*(n%10)
n=n//10
回程针
def mdr(n):

如果n通常情况下,这是不可能的–
MPersistence
只会在
MDR
之前或之后运行。至少,
MDR
需要修改,以跟踪迭代本身,这就产生了如何在两个函数之间安全地交换结果的问题。理想情况下,
MPersistence
应该通过独立计算数字乘法链来工作

为了避免代码重复,使用一个同时计算数字根和持久性的函数;根据需要,提供方便的函数直接返回每个组件

def mdrp(n:int): """ 计算``n的乘法持久性和数字根`` """ 如果n<10: 返回0,n 其他: 持久性,数字根=mdrp(prodDigits(n)) 返回持久性+1,数字根 def MDR(n): 返回mdrp(n)[1] 定义MPersistence(n): 返回mdrp(n)[0]
您不需要另一个函数来计算函数调用。MisterMiyagi的想法是在函数本身内部有一个计数器,并在每次函数调用时返回持久性和数字根,最后解包结果

我认为更简单的方法是将计数器作为全局变量,并在每次调用时增加其在函数中的值:

def mdr(n):
    if n<10:
        return n
    else:
        return mdr(prodDigits(n))
        globals()['persistence'] += 1

persistence = 0
print(mdr(86), persistence)  # 6 3

这不是一个纯粹的函数,因为它依赖并改变非局部变量。

一般来说,你不能
mdr
需要计算迭代次数
MPersistance
需要访问该数字并报告它。查看这是否有帮助任务描述中没有任何说明
MPersistence
必须通过计数/检查
mdr
递归来工作。是什么让你认为你必须这样做?我已经尝试过了,但执行后出现了“TypeError:“int”object is not iterable”错误。@AmritaGhatak在递归时出错,调用了一个未定义的函数,而不是它本身。现在应该修好了。谢谢!它现在工作正常。但我不明白为什么持久性和数字根返回2个不同的值的其他部分逻辑。你能告诉我内部发生了什么吗。否则:persistence,digital_root=mdrp(proddights(n))返回persistence+1,digital_root返回persistence和digital root。else子句只是将它们从递归调用中解包出来,并增加持久性,即递归级别,即每次递归调用都必须增加一个持久性。实际上,在我的赋值中,问题是要编写函数MDR()和MPersistence()输入一个数字并分别返回其乘法数字根和乘法持久性。所以,也许我一定要使用MistRealEngor()函数,我已经尝试过了,但是它给了我打印(MDR(86),持久性)…6…0作为输出。我不明白为什么。考虑到全局关键字而不是编辑全局字典。
print(msr(341), persistence) # 2 5 Wrong result

persistence = 0
print(msr(341), persistence) # 2 2 Right result