输入两个正整数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对格式的要求极其严格,也不是说没有空两行程序有问题,只是可能函数下面有灰色的下滑线,也可以关掉)