python实现Rational类的+、-、*、/以及Rich comparision方法

python实现Rational类的+、-、*、/以及Rich comparision方法(即可以进行>=、>、<=、<、==、!=等复比较操作
思路分析:利用functools total_ordering实现整套复比较操作。只要实现__eq__()和(ge()、gt()、le()、lt())中的一个即可,其他的可通过取反得知结果。
代码展示
classes xmath.py

from functools import total_ordering
@total_ordering
class Rational:
    def __init__(self,numer,denom):
        self.numer=numer
        self.denom=denom
    def __add__(self, other):
        return Rational(
            self.numer*other.denom+self.denom*other.numer,
            self.denom*other.denom
        )
    def __sub__(self, other):
        return Rational(
            self.numer*other.denom-self.denom*other.numer,
            self.denom*other.denom
        )
    def __mul__(self, other):
        return Rational(
            self.numer*other.numer,
            self.denom*other.denom
        )
    def __truediv__(self, other):
        return Rational(
            self.numer*other.denom,
            self.denom*other.denom
        )
    def __eq__(self, other):
        if self is other:
            return True
        elif self.numer/self.denom==other.numer/other.denom:
            return True
        else:
            return False
    def __gt__(self, other):
        return self.numer/self.denom>other.numer/other.denom

    def __str__(self):
        return '{}/{}'.format(self.numer,self.denom)
    def __repr__(self):
        return 'Rational({},{})'.format(self.numer,self.denom)

classes xmath_demo.py

import xmath
m=xmath.Rational(2,3)
n=xmath.Rational(4,6)
x=xmath.Rational(2,7)
print('m=2/3,n=4/6,x=2/7')
print('m+x=',m+x)
print('m-x=',m-x)
print('m*x=',m*x)
print('m/x=',m/x)
print('m==m is',m==m)
print('m==n is',m==n)
print('m==x is',m==x)
print('m!=x is',m!=x)
print('m>x is',m>x)
print('m>=x is',m>=x)
print('m<x is',m<x)
print('m<=x is',m<=x)

运算结果:

m=2/3,n=4/6,x=2/7
m+x= 20/21
m-x= 8/21
m*x= 4/21
m/x= 14/21
m==m is True
m==n is True
m==x is False
m!=x is True
m>x is True
m>=x is True
m<x is False
m<=x is False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值