Second_Week_Day01定义函数和调用函数

输入两个正整数M和N,计算C(M,N),C(M,N)是排列组合公式

m = int(input('m = '))
n = int(input('n = '))
fm = 1
fn = 1
fmn = 1
for num in range(1,m + 1):
    fm *= num
for num in range(1, n + 1):
    fn *= num
for num in range(1, m - n + 1):
    fmn *= num
print(fm // fn // fmn)

上面程序出现了重复代码来求阶乘,我们可以通过定义一个函数来调用, 这样我们可以避免重复的写代码,将来也可以重复的使用这些功能模块。python中的函数就是代表了这样的功能模块
y = f(x) f是函数命 ;x是自变量;
python中定义函数
定义求阶乘的函数 ~ 将求阶乘的功能抽取出来放到函数中
这里我们定义了一个求x阶乘的函数,x为自变量,factorial(x)为因变量

def factorial(x):
    """
    # 文本注释
    计算阶乘
    :param x: 一个非负整数
    :return: 阶乘
    """
    y = 1
    for num in range(1, x + 1):
        y *= num
    return y

if __name__ == '__main__':
    m = int(input('m = '))
    n = int(input('n = '))
    print(factorial(m))
    print(factorial(n))
    print(factorial(m - n))
    print(factorial(m) // factorial(n) // factorial(m - n))

通过下面的if的条件(name == ‘main‘)可以在另一个项目导入 factorial(x)函数时
不执行if下面的语句

from math import sqrt
# num = int(input('请输入一个数:'))
# 下面定义的函数是判断一个数是不是素数的函数

def is_prime(num):
    """
    # 文本注释(以后在调用函数时,可以通过Ctrl+Q来查看文本注释)
    判断一个数是不是素数
    :param num:一个不为1正整数
    :return:如果是素数返回Ture否则返回False
    """
    for n in range(2, int(sqrt(num)) +1):
        if num % n == 0:
            return False
    return True


if __name__  == '__main__':
    print(is_prime(5))

以后在调用函数时,可以通过Ctrl+Q来查看文本注释来了解这个函数是做什么的

# 计算最大公约数的函数


def gcd(x, y):
    # 文本注释
    """
    求最大公约数
    :param x: 正整数
    :param y: 正整数
    :return: 最大公约数
    """
    (x, y) = (y, x) if x > y else (x, y)
    for factor in range(x, 0, -1):
        if x % factor ==0 and y % factor == 0:
            return factor
    return 1

在使用range()的函数要做一个从大到小循环,把range()中的 步长改成-1就可以了

# 计算最小公倍数的函数


def lcm(x, y):
    return x * y // gcd(x, y)

# 定义一个多个变量求和的函数


 def add(x, y, z):
     return x + y + z

可变参数 —函数的参数个数可以有任意多个



def add(*args):
    """
    求可变参数的和
    :param args:可变的参数
    :return:可变参数之和
    """
    total = 0
    for value in args:
        total += value
    return total

如果定义两个函数用了同样的函数:
1、 函数名在同一模块,导出函数以后定义的那个为准
2、函数名不在同一模块时,如果我们写成
import combination
inport Day06homework
combination.add(x, y, z) and Day06homework.add(x, y, z)两个函数不会引起冲突
如果我们写成这样
from combination import add
from Day06homework import add
我们使用add(x, y, z)以后调用的为准

给一个数,判断是不是回文数
回文数12321, 11 , 121 , 1221



def is_palindrome(num):
    """
    判断一个数是不是回文数
    :param x: 一个非负整数
    :return:是回文数返回Ture否则返回False
    """
    temp = num
    total = 0
    while temp > 0:
        total = total*10 + temp % 10
        temp //= 10
    return total == num

在定义函数时,1、我们一定要养成习惯写文本注释,这样以后才能便于我们查看这个函数是干什么用的;2、函数表达式的前后需要空出两行(这是因为python对格式的要求极其严格,也不是说没有空两行程序有问题,只是可能函数下面有灰色的下滑线,也可以关掉)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值