python类学习

class Rational:
    def __init__(self,num,den=1): # 初始化方法,构造本类的新对象
        self.num = num
        self.den = den

    def plus(self,another): # 实例方法
        den = self.den * another.den
        num = (self.num*another.den+self.den*another.num)
        return Rational(num,den)

    def print(self): # 实例方法
        print(str(self.num)+"/"+str(self.den))

class Rational_2:
    @staticmethod
    def _gcd(m,n):
        if n==0:
            m,n = n,m
        while m!=0:
            m,n = n%m , m
        return n

    def __init__(self,num,den=1):
        if not isinstance(num,int) or not isinstance(den,int):
            raise TypeError
        if den == 0:
            raise ZeroDivisionError
        sign = 1
        if num<0:
            num,sign = -num,-sign
        if den<0:
            den,sign = -den,-sign

        # call function gcd defined in this class
        g = Rational_2._gcd(num,den)
        self._num = sign*(num//g)
        self._den = den//g

    def num(self):
        return self._num
    def den(self):
        return self._den

    def __add__(self, another): # mimic+operator
        if not isinstance(another,Rational_2):
            raise TypeError

        den = self._den * another.den()
        num = (self._num * another.den() + self._den*another.num())
        return Rational_2(num,den)

    def __mul__(self, another): # mimic * operator
        if not isinstance(another,Rational_2):
            raise TypeError

        return Rational_2(self._num*another.num(),self._den*another.den())

    def __floordiv__(self, another): # mimic // operator
        if not isinstance(another,Rational_2):
            raise TypeError
        if another.num() == 0:
            raise ZeroDivisionError

        return Rational_2(self._num*another.den(),self._den*another.num())

    def __eq__(self, another):
        return self._num*another.den() == self._den * another.num()

    def __lt__(self, another):
        return self._num * another.den() < self._den * another.num()

    def __str__(self):
        return str(self._num)+"/"+str(self._den)

    def print(self):
        print(self._num,"/",self._den)


five = Rational_2(5)
x = Rational_2(3,5)
x.print()
print("Two thirds are",Rational_2(2,3))

y = five+x*Rational_2(5,17)
y.print()




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值