python实现分数的加减乘除

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/7/15 13:43
# @Author : wutiande

def gcd(a,b):
    if b==0:
        return a
    else:
        return gcd(b,a%b)

def lcm(a,b):
    d = gcd(a,b)
    return a//d*b


class Fraction:
    def __init__(self,up,down):
        """成员变量"""
        if down == 0:
            raise("分母不能为0")
        self.up = up
        self.down = down

    def reduction(self):
        """约分"""
        if self.down < 0: # 分母为负数,分子分母同时取反
            self.up = -self.up
            self.down = -self.down
        if self.up == 0: # 分子为0,分母为1
            self.down = 1
        else:
            d = gcd(abs(self.up),abs(self.down)) # 求最大公约数,化简
            self.up //=d
            self.down //=d

    def __add__(self, other):
        """加法"""
        up = self.up*other.down + other.up*self.down
        down = self.down*other.down
        f = Fraction(up,down)
        f.reduction() #约分
        return f

    def __sub__(self, other):
        """减法"""
        up = self.up * other.down - other.up * self.down
        down = self.down * other.down
        f = Fraction(up, down)
        f.reduction()  # 约分
        return f

    def __mul__(self, other):
        """乘法"""
        up = self.up * other.up
        down = self.down * other.down
        f = Fraction(up, down)
        f.reduction()  # 约分
        return f

    def __truediv__(self, other):
        up = self.up * other.down
        if other.up == 0:
            raise("不能除以0")
        down = self.down * other.up
        f = Fraction(up, down)
        f.reduction()  # 约分
        return f



if __name__ == '__main__':
    f1 = Fraction(1,3)
    f2 = Fraction(1,2)
    f3 = f1-f2
    f4 = f1*f2
    f5 = f1/f2
    f6 = f1+f2
    print(f3.up,f3.down)
    print(f4.up,f4.down)
    print(f5.up,f5.down)
    print(f6.up, f6.down)

-1 6
1 6
2 3
5 6

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值