2014-10-11 56 views
-1

如何在我的add函數中使用gcd的值。目前的代碼是拋出誤差Python對象使用

Traceback (most recent call last): 
    File "E:/python/pythonclass", line 32, in <module> 
    f4=f2+f3 
    File "E:/python/pythonclass", line 22, in __add__ 
    common=gcd(newnum,newden) 
NameError: global name 'gcd' is not defined 

代碼:

class Fraction: 
    def __init__(self,top,bottom): 
     self.num=top 
     self.den=bottom 
    def __str__(self): 
     return str(self.num)+"/"+str(self.den) 
    def __gcd__(self,a,b): 
     m=self.a 
     n=self.b 
     while m%n !=0: 
      oldm=n 
      oldn=n 

      m=oldn 
      n=oldm%oldn 

     return n 

    def __add__(self,f1): 
     newnum =self.num*f1.den+self.den*f1.num 
     newden= self.den*f1.den 
     common=gcd(newnum,newden) 
     return Fraction(newnum,newden) 



f2= Fraction(3,5) 
print "First fraction" ,f2 
f3= Fraction(5,3) 
print "second fraction",f3 

f4=f2+f3 
print f4 
+3

Python中沒有'gcd()'函數。你似乎期望'__gcd__'方法被調用;你在哪裏得到了它的印象? – 2014-10-11 14:42:26

+1

如果該方法確實被調用,它將忽略其參數並使用實例屬性。 – jonrsharpe 2014-10-11 14:45:29

回答

0
  1. 如果你談論的是Python的fractions圖書館和its gcd method,你會遇到這樣的錯誤,因爲你可能永遠不會進口gcd,但只有fractionsimport fractions

    解決該問題的一種方法是改爲撥打fractions.gcd。行:

    common=gcd(newnum,newden) 
    

    應該是:

    common=fractions.gcd(newnum,newden) 
    

    另一種方法是導入gcd

    from fractions import gcd 
    
  2. 如果你不是說Python的庫,但自己__gcd__方法(在這種情況下,你爲什麼重新發明輪子而不是使用Python的庫?),我認爲這很明顯:你應該調用self.__gcd__代替。

+1

非常感謝您的回覆。我想寫分數類不從庫導入。我正在嘗試編寫gcd課程和廣告方法。在添加方法中,我想使用gcd方法的輸出。你能幫我理解我如何在這裏使用gcd方法的輸出。 – user3858193 2014-10-11 14:51:43

+1

通過調用'self .__ gcd__'來代替'common = gcd(newnum,newden)'成爲'common = self .__ gcd __(newnum,newden)'。 – 2014-10-11 14:58:18