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))