Python语法基础-最大公约数、最小公倍数

概述

大家好,又到了愉快的周末=o=不如看个精品文章后满足地睡去zZZZ。今天给大家准备了一个计算两个正整数最大公约数和最小公倍数的代码。

下面就开始学习叭~

思路

1、首先是编写计算最大公约数和最小公倍数函数,采用辗转相除法。a).将输入的两个正整数,分别赋值给num_1和num_2,num_1和num_2里较大者除以较小者取余,若余数为0则此时的较小者为最大公约数,输入的两个正整数的乘积除以最大公约数的结果即为最小公倍数,分别作为函数的返回值;b).若余数不为0,则将num1和num_2里较小者赋值给num_1,余数赋值给num_2,再次进行a)中操作。
2、编写主函数。提示用户输入2个正整数,这里需要两点:一是为防用户输入了非整数字符,用try…except结构做一下防呆处理,二是需对输入的两个正整数加以判断(不能相同),然后调用最大公约数和最小公倍数函数即可。

代码解析

1、最大公约数和最小公倍数函数

def public(num1,num2):
    num_1 = num1
    num_2 = num2
    while True:
        num_extra = max(num_1,num_2) % min(num_1,num_2)
        if num_extra == 0:
            return min(num_1,num_2),num1*num2//min(num_1,num_2) # 这里需注意最大公倍数是由两个“原始数”的乘积除以最大公约数
        else:
            num_1 = min(num_1,num_2)
            num_2 = num_extra

2、主函数

def main():
    while True:
        try:
            num1 = int(input('请输入第一个正整数:'))
            num2 = int(input('请输入第二个正整数:'))
            if num1 == num2:
                print('输入的两个正整数不能相同,请重新输入。')
                continue
            else:
                public_b = public(num1,num2)[0]
                public_s = public(num1,num2)[1]
                print('*'*30)
                print('{}和{}的最大公约数为{}。'.format(num1,num2,public_b))
                print('{}和{}的最小公倍数为{}。'.format(num1,num2,public_s))
                print('*'*30)
            con = input('是否继续计算(输入Y或y继续,其他则退出程序):')
            if con.lower() != 'y':
                print('程序结束。')
                break
        except ValueError:
            print('输入格式错误,请重新输入。')
            continue # 当输入的信息不为整数字符时,提示并重新开始循环

完整代码、效果展示

def public(num1,num2):
    num_1 = num1
    num_2 = num2
    while True:
        num_extra = max(num_1,num_2) % min(num_1,num_2)
        if num_extra == 0:
            return min(num_1,num_2),num1*num2//min(num_1,num_2) # 这里需注意最大公倍数是由两个“原始数”的乘积除以最大公约数
        else:
            num_1 = min(num_1,num_2)
            num_2 = num_extra

def main():
    while True:
        try:
            num1 = int(input('请输入第一个正整数:'))
            num2 = int(input('请输入第二个正整数:'))
            if num1 == num2:
                print('输入的两个正整数不能相同,请重新输入。')
                continue
            else:
                public_b = public(num1,num2)[0]
                public_s = public(num1,num2)[1]
                print('*'*30)
                print('{}和{}的最大公约数为{}。'.format(num1,num2,public_b))
                print('{}和{}的最小公倍数为{}。'.format(num1,num2,public_s))
                print('*'*30)
            con = input('是否继续计算(输入Y或y继续,其他则退出程序):')
            if con.lower() != 'y':
                print('程序结束。')
                break
        except ValueError:
            print('输入格式错误,请重新输入。')
            continue # 当输入的信息不为整数字符时,提示并重新开始循环

if __name__ == '__main__':
    main()

在这里插入图片描述
迎接周末叭,晚安- -