2015-12-02 38 views
1

我試圖解決一個練習,它包含給定數字的一個主分解。代碼不工作在一個類

def primes(n): 
    p=[] 
    for a in range(2,n+1): 
     if (is_prime(a)): p.append(a) 
    return p 

def is_prime(number): 
    for n in range(2,number): 
     if not number%n : return False 
    return True 

def factor(z): 
    p=primes(z) 
    fact={} 
    if z in p: 
     fact[z]=1 
    else: 
     for n in p: 
      while z%n==0 and (z/n not in p): 
       if n not in fact: fact[n]=1 
       else: fact[n]+=1 
       z/=n 
      if z%n==0 and (z/n in p): 
       if n in fact: fact[n]+=1+(z/n==n) 
       else: 
        fact[n]=1 
        fact[z/n]=1+(z/n==n) 
       break 


    return fact 

print factor(13) 

我的代碼像一個魅力工作;但exercice希望我把它在一個類開始:

class PrimeFactorizer: 
    #your code here 

這將與PrimeFactorizer(n).factor

當我添加的工作上面的代碼到

class PrimeFactorizer: 
    def __init__(self, z): 
     self.z=z 

來稱呼它返回我的當致電PrimeFactorizer(13).factor 空的東西可以有人給我一個暗示我做錯了什麼? 感謝

+0

'.factor'或'.factor()'? – Mel

+0

指示說.factor TBH我真的不知道其中的差別:對 –

+0

閱讀'Python文檔 –

回答

0

這應該做的伎倆:

class PrimeFactorizer: 
    def __init__(self, z): 
     self.z=z 

    def primes(self,n): 
     p=[] 
     for a in range(2,n+1): 
      if (self.is_prime(a)): p.append(a) 
     return p 

    def is_prime(self,number): 
     for n in range(2,number): 
      if not number%n : return False 
     return True 

    def factor(self): 
     p=self.primes(self.z) 
     fact={} 
     if self.z in p: 
      fact[self.z]=1 
     else: 
      for n in p: 
       while self.z%n==0 and (self.z/n not in p): 
        if n not in fact: fact[n]=1 
        else: fact[n]+=1 
        self.z/=n 
       if self.z%n==0 and (self.z/n in p): 
        if n in fact: fact[n]+=1+(self.z/n==n) 
        else: 
         fact[n]=1 
         fact[self.z/n]=1+(z/n==n) 
        break 
     return fact 

print PrimeFactorizer(8).factor() # Output: {2: 3} 
print PrimeFactorizer(13).factor() # Output: {13: 1}} 
+0

在class'我無法通過測試的指令說.factor而不是.factor() 嘗試找出差異:p –

+0

那麼您可以將self.factor()添加到__init__的末尾,並將返回的事實更改爲print事實。在這種情況下,您可以調用「PrimeFactorizer(13).factor」,它將打印{13:1}。但是當「PrimeFactorizer(13)」被調用時,我將打印相同的內容。 –