簡體   English   中英

不知道為什么沒有為最大公約數功能定義Name

[英]Don't know why Name is not defined for greatest common divisor function

我試圖創建一個函數,允許具有不同分母的分數使用+運算符,同時將結果簡化為分子和分母的最大公約數可除的分數。

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(m, n):
        while m%n != 0:
            oldm = m
            oldn = n

            m = oldn
            n = oldm%oldn
        return n


    def __add__(self, otherFraction):
        newnum = self.num*otherFraction.den + \
                 self.den*otherFraction.num
        newden = self.den*otherFraction.den
        common = gcd(newnum, newden)

        return Fraction(newnum//common, newden//common)

f1 = Fraction(1,4)
f2 = Fraction(1,2)

f3 = f1+f2
print(f3)

我期望輸出為3/4 ,並收到以下錯誤。


Traceback (most recent call last):
  File "C:\Users\matth\Desktop\MandRfraction.py", line 35, in <module>
    f3 = f1+f2
  File "C:\Users\matth\Desktop\MandRfraction.py", line 28, in __add__
    common = gcd(newnum//common, newden//common)
NameError: name 'gcd' is not defined

我不知道為什么沒有定義gcd。

這是一個類特定的函數,也稱為“方法”(在Fraction類中定義),因此您需要將其稱為Fraction.gcd而不是gcd

由於它是靜態函數(未連接到任何單獨的Fraction ),因此,將其標記為這樣也是一種好的做法:

@staticmethod
def gcd(m, n):
    return ...

現在,您可以將其稱為self.gcd(...) (在任何Fraction方法內部),也可以稱為Fraction.gcd(...) (在任何地方)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM