python碾转取余约分算法


def yue_fen(fm: int, fz: int):
    # 取两数最大公约数
    """
    利用碾转取余法
    1.比较分母分子哪个大
    2.大数除小数取余
    3.如果余不为0,则将此地的小数做为下一次的大数,余数做为下一次的小数
    4.直到余数为0,则跳出循环,此时的小数就是最大公约数
    5.最后将 最初的分子分母同时除以最大约数取整,可得最简分数
    :param fm:
    :param fz:
    :return:
    """
    max = fm
    min = fz
    if fm == 0:
        return "分母不能为0!"
    if fz == 0:
        return 0
    if fm < fz:
        max = fz
        min = fm
    # 海象运算符直接将前置运算写入判定式中,节省代码
    while y := max % min != 0:
        max = min
        min = y

    return f"{int(fz / min)}/{int(fm / min)}"

测试方法

class TestArtic(unittest.TestCase):
    def test_yue_fen(self, ):
        test_data = [("1/3", 9, 3),
                     ("615/1997", 1997, 615),
                     ("1/2", 30, 15),
                     (0, 2, 0),
                     ("分母不能为0!", 0, 2),
                     ("3/1", 3, 9)]
        """
        这里subTest是unittest内置的数据驱动方式
        通过循环数据,向subTest传入与对应的关键字参数
        msg可以不传入,传的话会在每个子测试开始位置显示,如图标记 1 处
        其余关键字可以任意输入,是显示在子测试后的参数名字,如图标记 2 处,但建议与测试方法值传参名字一致,方便调试
        assertEqual 中的参数,必须与 for 内循环的参数一致
        """
        for re, fm, fz in test_data:
            with self.subTest(msg=f"test_yue_fen",re=re, fm=fm, fz=fz):
                self.assertEqual(re, yue_fen(fm, fz))

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值