不知道为什么没有为最大公约数功能定义Name

时间:2019-06-26 21:48:27

标签: python

我试图创建一个函数,允许具有不同分母的分数使用+运算符,同时将结果简化为分子和分母的最大公约数可除的分数。

n

我希望输出为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

我不知道为什么未定义gcd。

1 个答案:

答案 0 :(得分:4)

这是一个类特定的函数,也称为“方法”(在Fraction类中定义),因此您需要将其称为Fraction.gcd而不是gcd

由于它是 static 函数(未连接到任何单独的Fraction),因此,最好将其标记为:

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

现在,您可以将其命名为self.gcd(...)(在任何Fraction方法内部),也可以命名为Fraction.gcd(...)(在任何地方)。