Python3 分数类,运算,最大公因数(In this problem, we will write a class that ...)

整理不易,如果本文帮助了您,请点个赞再走!! ->_<- 

 

原题: 
In this problem, we will write a class that can represent rational numbers, i.e. fractions
p/q.
(a) Create a class Rational which is initialized by two integers, p and q, the nominator
and denominator
(b) Add a method to print the rational number as p/q (the __str__ or __repr__ method
is useful).
(c) We would like to represent 10/20 by 1/2 instead, hence write a function that
computes the greatest common divisor, and ensure that every rational number is
simplified
(d) Add a method so that we can add two rational numbers with r1 + r2, here the
__add__() method is useful.
(e) Add a method to subtract two rational numbers. (__sub__)
(f) Add a method to multiply two rational numbers. (__mul__)
(g) Add a method to divide two rational numbers. (__truediv__)
(h) Add a method that compares whether two rational numbers are equal.
(i) Add a method to convert the rational number to a floating point (the __float__()
method maybe handy)
 代码:
class Fraction:
    def __init__(self,p,q):
        self.nominator=p
        self.denominator=q
        self.normalize()


    def __str__(self):
        return str(self.nominator)+'/'+str(self.denominator)

    def __add__(self,other):
        a = self.nominator
        b = self.denominator
        c = other.nominator
        d = other.denominator
        p = a * d + c * b
        q = b * d
        return Fraction(p,q)

    def __sub__(self,other):
        a = self.nominator
        b = self.denominator
        c = other.nominator
        d = other.denominator
        p=a*d-c*b
        q=b*d
        return Fraction(p,q)

    def __mul__(self,other):
        a = self.nominator
        b = self.denominator
        c = other.nominator
        d = other.denominator
        p=a*c
        q=b*d
        return Fraction(p,q)

    def __truediv__(self,other):
        a = self.nominator
        b = self.denominator
        c = other.nominator
        d = other.denominator
        p=a*d
        q=b*c
        return Fraction(p,q)

    def __eq__(self, other):
        return self.nominator== other.nominator and self.denominator==other.denominator

    def __float__(self):
        return float(self.nominator/self.denominator)


    def normalize(self):
        def gcd(p,q):
            r = 1
            r = p % q
            if r == 0:
                return q
            else:
                return gcd(q, r)
        divide=gcd(self.nominator,self.denominator)
        self.nominator=int(self.nominator/divide)
        self.denominator=int(self.denominator/divide)



a=Fraction(10,20)
b=Fraction(10,30)
c=Fraction(10,20)
print(a,b)
print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(a==b,a==c)
print(float(a),float(b))

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值