[英]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.