我试图创建一个函数,允许具有不同分母的分数使用+运算符,同时将结果简化为分子和分母的最大公约数可除的分数。
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。
答案 0 :(得分:4)
这是一个类特定的函数,也称为“方法”(在Fraction
类中定义),因此您需要将其称为Fraction.gcd
而不是gcd
。
由于它是 static 函数(未连接到任何单独的Fraction
),因此,最好将其标记为:
@staticmethod
def gcd(m, n):
return ...
现在,您可以将其命名为self.gcd(...)
(在任何Fraction
方法内部),也可以命名为Fraction.gcd(...)
(在任何地方)。