递归函数
1.什么是递归函数
递归:函数在运行过程中,直接或者间接的调用了自身
2.为什么要有递归函数
1.递推
一层层往下推导答案,每次递归之后复杂程度相较于上一次一定要有所下降
2.回溯
依据最后的结论往后推导出最初需要的答案
递归一定要有结束条件!!!
官网:默认最大的递归深度为1000!!!
3.怎么使用递归函数
根据条件:已知当前一号比二号大两岁,二号比三号大两岁,三号比四号大两岁,五号20岁,根据条件计算出一号多少岁。
伪代码:可能无法运行,但可以标表述逻辑
age(1) = age(2) + 2
age(2) = age(3) + 2
age(3) = age(4) + 2
age(4) = age(5) + 2
age(5) = 20
根据条件需要重复计算,尝试可以使用for循环或while循环
age = 20
for i in range(4):
age += 2
print(age)
28
# 在已知需要循环次数的情况下可以计算出
尝试函数
def count(n): # 创建函数,设置形参
if n == 1: # 判断等于一
return 20 # 结束函数体代码,返回20
return count(n - 1 ) +2 # 返回这个函数体实参减1,的函数体+2
print(count(5)) # 因为有五个人,所以五次
28 # 最后递归4次每次返回值+2,但没有实际的返回值
# 当最后一步得到一个返回值,20开始回溯+2.最后返回28
4.另一种使用:
l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]]
将列表中每个数字依次去除,只能取出数字
循环该列表,判断是否是数字,数字打印
是列表循环,判断是否是数字,数字打印
...
def list(l): # 建立函数,将列表填入
for i in l: # 循环列表,依次取值
if type(i) is int: # 判断取出来的值是不是整形
print(i) # 是整形就打印
else:
list(i) # 不是整形就继续走函数体代码,将取出来的列表重新循环
list(l) # 调用函数

算法(二分法)
1.什么是二分法
解决问题的高效方法
2.为什么要有二分法
不知道
3.怎么使用二分法
'''二分算法使用场景:数据集必须有序'''
l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
利用二分算法判断出321在不在这里列表中,
def list(a,b): # a代表要查询的元素321,b代表需要传入这个列表。两个参数
def list(a,b): # a代表要查询的元素321,b代表需要传入这个列表。两个参数
if len(b) == 0: #判断判断列表是不是等于0,
print('没有')# 等于0还没有找到就是没有
return # 结束
c = len(b)//2 # 计算出列表的整体长度并整除2获取一半获得索引
if a > b[c]: # 判断a是不是大于b根据索引c取出来的值
print('大于')
d = b[c+1:] # 大于就将索引位置后面的列表切出来,因为顾头不顾尾取出来的值可以不用比较所以加1
list(a,d) # 在调用函数将a填入,再将取出来的列表d填入
elif a < b[c]: # 判断a是不是大于b根据索引c取出来的值
print('小于')
e = b[:c] #如果a小于取出来的值就将列表左边切出来
list(a,e) # 在调用函数将a填入,再将取出来的列表e填入
else: # 不大于不小于就是等于,所以就直接打印出来,并return
print('找到',a)
return
list(33,l)

列表表达式
变量名 = [i for i in 列表]
1.什么是列表生成式
不知道
2.为什么要有列表生成式
不知道
3.怎么使用列表生成式
l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
res = [i for i in l]
[11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
将l里面的元素通过for循环取出赋值给i,在添加到现有res的列表中
res = ['%s_DSB' % i for i in l]
['11_DSB', '23_DSB', '43_DSB', '57_DSB', '68_DSB', '76_DSB']
利用%s可以给元列表中的元素添加统一后缀

字典生成式
列表1
列表2
空字典
for i in range(len(列表1))
空字典[列表1[i]] = 列表2[i]
1.什么是字典生成式
2.为什么要有字典生成式
3.怎么使用字典生成式
l1 = ['name', 'age', 'hobby']
l2 = ['jason', 18, 'read']
new_dict = {}
for i in range(len(l1)): # 计算列表长度,表示循环次数
new_dict[l1[i]] = l2[i] #将需要当K值的列表当做K
print(new_dict)
三元表达式
左边 if 判断是否成立 else 右边
成立就左边,不成立就右边
1.什么是三元表达式
条件成立采用if前面的值 if 条件 else 条件不成立采用else后面的值
三元表达式尽量不要嵌套使用
2.为什么要有三元表达式
当功能需求仅仅是二选一的情况下 那么推荐使用三元表达式
3.怎么使用三元表达式
is_free = input('电影是否收费(y/n)>>>:').strip()
if is_free == 'y':
print('收费')
else:
print('免费')
print('收费' if is_free == 'y' else '免费')

匿名函数
1.什么是匿名函数
没有名字的函数与函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非让其有名字
lambda 形参:返回值
2.为什么要有匿名函数
3.怎么使用匿名函数
print(lambda x:x**2)
