当我运行类Fraction时,未定义全局名称简化是我得到的错误。虽然我在同一类Fraction中定义了简化函数。独立运行时的简化功能运行完美。 Fraction类在没有简化函数的情况下运行时,返回的答案未按预期简化。当我尝试在添加后简化分数后会出现什么问题?
class Fraction:
def __init__(self, a, b):
self.a = a
self.b = b
#simplify, simplifies the fraction.(2/4 to 1/2)
#add, adds two fractions and then returns the simplified fraction.
def __add__ (self, f):
if (self.b == f.b) :
return simplify(Fraction(self.a + f.a , f.b))
else :
pro = self.b * f.b
return simplify(Fraction(self.a * f.b + f.a * self.b , pro))
答案 0 :(得分:1)
由于simplify
是本地函数,因此您应该使用语法Class.function
。
试图简单地运行,解释器将寻找全局simplify
函数。
以下是您应该尝试的内容:
class Fraction:
def __init__(self, a, b):
self.a = a
self.b = b
#simplify, simplifies the fraction.(2/4 to 1/2)
#add, adds two fractions and then returns the simplified fraction.
def __add__ (self, f):
if (self.b == f.b) :
return Fraction.simplify(Fraction(self.a + f.a , f.b))
else :
pro = self.b * f.b
return Fraction.simplify(Fraction(self.a * f.b + f.a * self.b , pro))
希望有所帮助
答案 1 :(得分:0)
您正在混合功能和方法。
一个函数看起来像f(a, b)
。方法看起来像<class instance>.method(a, b)
看看这个(我使用Python fractions模块来简化'简化'):
import fractions
class MyFraction:
def __init__(self, a, b):
self.a = a
self.b = b
def simplify(self):
rtr=fractions.Fraction(self.a, self.b)
print('"simplify({}, {})"={}'.format(self.a,self.b, rtr))
return rtr
#simplify, simplifies the fraction.(2/4 to 1/2)
#add, adds two fractions and then returns the simplified fraction.
def __repr__(self):
return '{}/{}'.format(self.a, self.b)
# alternatively, if you want to always print a simplified fraction:
# def __str__(self):
# return fractions.Fraction(self.a, self.b).__str__()
def __add__ (self, f):
if (self.b == f.b) :
return MyFraction(self.a + f.a , f.b).simplify()
else :
pro = self.b * f.b
return MyFraction(self.a * f.b + f.a * self.b , pro).simplify()
print(MyFraction(2,4))
# 2/4
print(MyFraction(1, 2)+MyFraction(20, 30))
# "simplify(70, 60)"=7/6
# 7/6
作为一种风格问题,您可能希望在课堂上使用“分子”代替“a”和“分母”而不是“b”。您可能希望将其命名为“MyFraction”与库“Fraction”,因此不会与其他人查看您的代码混淆。