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

2024-10-02 12:29:00 发布

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

问题:“如果一个数字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循环中尝试了一些条件,但所有条件都会导致无限循环


Tags: 函数noreturndefcount数字prod持久性
2条回答

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

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

def mdrp(n: int):
    """
    Compute the multiplicative persistence and digital root of ``n``
    """
    if n < 10:
        return 0, n
    else:
        persistence, digital_root = mdrp(prodDigits(n))
        return persistence + 1, digital_root

def MDR(n):
    return mdrp(n)[1]

def MPersistence(n):
    return 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

这种方法看起来更简单,但有一点需要记住:每次调用函数之前都必须初始化计数器:

print(msr(341), persistence) # 2 5 Wrong result

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

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

相关问题 更多 >

    热门问题