邵邵。

导航

函数

递归函数

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)  # 调用函数

image

算法(二分法)

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)

image

列表表达式

变量名 = [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可以给元列表中的元素添加统一后缀

image

字典生成式

列表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 '免费')

image

匿名函数

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

image

posted on 2021-11-18 17:15  邵邵。  阅读(63)  评论(0)    收藏  举报