如何从另一个方法调用方法?

2024-05-15 08:56:33 发布

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

我正在用python编写一个程序。我引入了一个整数,程序还给我这个数的素因子分解。 例如6--->;3,2。另一个例子16-->2,2,2,2。在

我正在用OOP来做。我用2个方法(is_primeprime_factor_decomposition)创建了一个类(PrimeFactors)。第一种方法表示这个数是否为素数,第二种方法给出分解结果。在

代码如下:

class PrimeFactors(object):
    def __init__(self, number):
        self.number = number

    def is_prime(self):
        n = self.number - 1
        a = 0
        loop = True

        if self.number == 1 or self.number == 2:
            loop = False

        while n >= 2 and loop:
            if self.number % n != 0:
                n -= 1
            else:
                a += 1
                loop = False
        return a == 0

    def prime_factor_decomposition(self): 
        factors = [] 
        n = self.number - 1
        loop = True

        if PrimeFactors.is_prime(self.number):
            factors.append(self.number)
            loop = False

        while n >= 2 and loop:
            if self.number % n == 0 and PrimeFactors.is_prime(n):
                factors.append(n)
                self.number = self.number / n
                if self.number % n == 0:
                    n += 1
            n -= 1
        return factors

s = PrimeFactors(37)
print(s.is_prime())

我弄错了。我想是和方法调用有关的。 我的问题是,如果另一个方法都来自同一个类,如何从另一个方法调用它们?在


Tags: and方法self程序loopfalsenumberif
3条回答

Jkdc的回答绝对正确。我还想指出,你的方法调用会有问题。您定义了is_prime,以self作为它的唯一参数,但是当您调用它时,您将传入self.number或{}。在

如果您需要is_prime来处理任意数字,而不仅仅是初始化该类的任何内容,那么您应该添加一个额外的参数。在

您需要使用self.调用同一类的另一个方法:

class Foo:
    def __init__(self):
        pass

    def method1(self):
        print('Method 1')

    def method2(self):
        print('Method 2')
        self.method1()

只是一个一般的建议:有好的(和快速的!)检查一个数是否为素数的算法。你的循环从n-1开始,效率很低。假设数字是 1000000,所以你的算法从999999开始,但是第一个偶数可能是n的一半!所以我会从2到n/2:

for i in range(n/2):
    if self.number%i==0:
        return true
return false

我认为对于你来说,最好不是返回一个布尔值,而是返回一个被发现是除数的数字:

^{pr2}$

然后可以反复调用该方法,只会得到质数。在

相关问题 更多 >