2.函数和库
函数
问题:1.求阶乘$\begin{aligned}n!\end{aligned}$
def fac(n): # 求阶乘
if n == 1: # 收敛条件
return 1
else:
return n * fac(n - 1) # 递归引用本函数的函数名
fac(5)
上述函数的bug(0的阶乘)
使用循环的方式求阶乘
def fac_loop(n):
ret = 1
for i in range(n):
ret = ret * (i + 1)
return ret
print(fac_loop(5))
print(fac_loop(0))
print(fac_loop(1))
求组合数$\begin{aligned}{n\choose k}=\frac{n!}{(n-k)!k!}\end{aligned} $
def combination(n, k): # 求组合数
return fac(n) / (fac(n - k) * fac(k))
combination(52, 4)
函数的类型
type(fac) # function
函数的类型是参数类型到返回值类型两个类型集合的映射关系
max([23, 37, 13, 47]) # 输入类型是一个list,输出类型是一个数值
方法
pl = [23, 37, 13, 47]
pl.sort() # 输入类型是一个list,输出类型是一个list,类型实例和函数名之间用一个.连接
pl
help(list.sort) # 获得在线帮助
pl.sort(reverse=True) # 命名参数
pl
help(list) # 列出list的全部方法
问题:伟人排序
像 | 姓名 | 出生年 | 寿命 |
---|---|---|---|
![]() |
佛陀 | 480BC | 80 |
![]() |
孔子 | 551BC | 73 |
![]() |
柏拉图 | 428BC | 80 |
![]() |
琐罗亚斯德 | 500BC | ? |
# 新数据类型:dict
great = [{'name':'Buddha', 'birth':-480, 'age':80},
{'name':'Confucius', 'birth':-551, 'age':73},
{'name':'Plato', 'birth':-428, 'age':80},
{'name':'Zoroaster', 'birth':-500, 'age':float('nan')}]
great[0]['name'] # 'Buddha'
great[1]['age'] # dict本身可以是list的元素 73
匿名函数
great = [{'name':'Buddha', 'birth':-480, 'age':80},
{'name':'Confucius', 'birth':-551, 'age':73},
{'name':'Plato', 'birth':-428, 'age':80},
{'name':'Zoroaster', 'birth':-500, 'age':float('nan')}]
great.sort(key=lambda person: person['age'], reverse=True) # key 参数要求一个函数类型,lambda在这里非常方便
great
运行结果如下:
[{'name': 'Buddha', 'birth': -480, 'age': 80},
{'name': 'Plato', 'birth': -428, 'age': 80},
{'name': 'Confucius', 'birth': -551, 'age': 73},
{'name': 'Zoroaster', 'birth': -500, 'age': nan}]
great = [{'name':'Buddha', 'birth':-480, 'age':80},
{'name':'Confucius', 'birth':-551, 'age':73},
{'name':'Plato', 'birth':-428, 'age':80},
{'name':'Zoroaster', 'birth':-500, 'age':float('nan')}]
great.sort(key=lambda o: o['birth'])
great
运行结果如下:
[{'name': 'Confucius', 'birth': -551, 'age': 73},
{'name': 'Zoroaster', 'birth': -500, 'age': nan},
{'name': 'Buddha', 'birth': -480, 'age': 80},
{'name': 'Plato', 'birth': -428, 'age': 80}]
库的安装和引用
pip3 install algorithms
python3 -c 'from algorithms.sort import merge_sort'
from algorithms.sort import merge_sort
test_list = [1, 8, 3, 5, 6]
result_list = merge_sort(test_list)
result_list
库地址: