python小众习题详解之二

我们可以把程序中相对独立的功能模块抽取出来这样做的好处:

一是减少重复代码的编写

二是将来可以重复的使用这些功能模块

Python中的函数就是代表了这样的功能模块
例1:X1 + X2 + X3 + X4 = 8 ,有多少组解? C(7,3)
# 复杂代码:
m = int(input('m ='))
n = int(input('n ='))
fm = 1
for num in range(1,m+1):
    fm *= num
fn = 1
for num in range(1,n+1):
    fn *= num
fmn = 1
for num in range(1,m - n + 1):
    fmn *= num
print(fm // fn // fmn)
# 简单代码
# y = f(x) f 是函数名 x 是自变量 y是因变量
# 定义求阶乘的函数 - 将求阶乘的功能抽取出来放到函数中
def f(x):        # 定义函数
    y = 1
    for z in range(1,x + 1):
        y *= z
    return y
m = int(input('m ='))
n = int(input('n ='))
# 当需要计算阶乘的时候不用在写循环而是直接调用已经定好的函数
print(f(m) // f(n) // f(m-n))
小结:这样既简化了代码,思路清晰了一点,更重要的是简洁明了,不拖沓~看起来也好看~
例2:判断一个数是不是素数,写成一个函数
# 定义判断素数的函数
def is_prime(num):
    from math import sqrt
    for factor in range(2, int(sqrt(num) + 1)):
            if num % factor == 0:
                return False
    return True
#  在调用函数的代码中时,在pycharm中可以ctrl加鼠标点击即可查看被调用的函数
例3.1:最大公约数
def gcd(x,y):
    (x, y) = (y, x) if x > y else (x, y)
    for factor in range(x, 0, -1):    # 从大到小的循环,步长为1
        if x % factor == 0 and y % factor ==0:
            return factor
例3.2:最小公倍数
def lcm(x,y):
    return x * y // gcd(x, y)
例4.判断是否为回文数,写出定义函数。
# 我写的如下:
def is_palindromic(num):
    a = str(num)
    b = len(a)
    for i in range(int(b/2)):
            if a[i] == a[b-i-1]:
                return True
# 老师写的如下:
def is_palindrome(num):
    """
判断一个数是不是回文数
    :param num:一个非负整数
    :return:是回文数返回True否则返回False
    """
    temp = num       # 12321
    total = 0
    while temp > 0:
        total  = total * 10 +temp % 10
        temp //= 10
    return num == total

了解到以下知识点:

and 和 or 运算符都是带短路功能的运算符

如果and左边的表达式是False那么右边的表达式被短路(不执行)

所以左右两边的表达式放置的顺序可能回对执行效率产生明显的影响

例5.判断是否为回文素数
"""这里就是调用了上文提到的两个函数:
   一是:判断是否为素数的函数【例2】
   二是:判断是否为回文数的函数【例4】
"""
num = int(input('请输入一个非负整数:'))
if is_palindrome(num) and is_prime(num): 
    print('%d是回文素数'%num)
else:
    print('%d不是回文素数'%num)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值