所以我试图在python中创建以下类:
该类应使用整数实例变量来存储有理数的分子和分母。 有理数必须以简化形式存储。 有理数的符号反映在分子的符号上。 该类必须执行数据验证以确保分母不为零。
此外,我想要合并以下重载的opeartors: +和 - 算术运算符 + - * / // 这些运算符应使用以下参数类型组合: (Rational,Rational) (Rational,int) (int,Rational) 关系运算符 这些是二元运算符< < = ==> => != 这些运算符应使用以下参数类型组合: (Rational,Rational) (Rational,int) (int,Rational)
我还想要两种不同的访问方法: numerator,返回有理数的分子 分母,返回有理数的分母
谢谢你们!
答案 0 :(得分:1)
fractions.Fraction
可以完成您需要的一切。
答案 1 :(得分:0)
这项任务相对简单。
class Rational(object):
__slots__ = ['numerator', 'denominator']
def __init__(self, numerator, denominator=1):
# initialize and verify, divide both parameters by GCD of both
要实现运算符,请使用特殊方法名称:
def __add__(self, other):
# add rational to something else
def __radd__(self, other):
# same, but with operands reversed
return self + other
然后继续实施__sub__
,__mul__
等。Python Data Model: 3.37 Emulating numeric types文档部分提供了完整列表。比较运算符名为__lt__
,__le__
等。您可以通过以下方式实现操作:
def __add__(self, other):
x_numer = self.numerator
x_denom = self.denominator
if isinstance(other, Rational):
y_numer = other.numerator
y_denom = other.denominator
elif isinstance(other, int):
y_numerator = other
y_denominator = 1
else:
return NotImplemented
return Rational(x_numer * y_denom + y_numer * x_denom, x_denom * y_denom)
您可能需要实施其他运营商,例如__repr__
和__str__
。
我希望这足以让你开始,其他方法就像上面的__add__
一样。