今日内容

1.递归函数

在函数的运行过程中直接或者间接的调用了自身

 1 # 官网表示:python默认的最大递归深度为1000次
 2 # import sys
 3 # print(sys.getrecursionlimit())
 4 # print(sys.setrecursionlimit(2000))
 5 count = 1
 6 def index():
 7     global count
 8     count += 1
 9     print(count)
10     print('from index')
11     index()
12 index()
13 
14 # def func():
15 #     print('from func')
16 #     index()
17 # def index():
18 #     print('from index')
19 #     func()
20 # index()

 

 

递归

1.递推

一层层往下推导答案(每次递归之后复制度相较于上一次一定要有所下降)

2.回溯

依据最后的结论往后推导出最初需要的答案

递归一定要有结束条件

 1 # 伪代码:可能无法运行 但是可以表述逻辑
 2 # age(5) = age(4) + 2
 3 # age(4) = age(3) + 2
 4 # age(3) = age(2) + 2
 5 # age(2) = age(1) + 2
 6 # age(1) = 18
 7 
 8 # def get_age(n):
 9 #     if n == 1:
10 #         return 18
11 #     return get_age(n - 1) + 2
12 # print(get_age(5))
 1 l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]]
 2 # 打印出列表中每一个元素(列表除外)
 3 # 1.循环该列表 获取列表内每一个元素
 4 # 2.判断该元素是否是数字 如果是数字 则直接打印
 5 # 3.如果是列表 则循环该列表 获取列表内每一个元素
 6 # 4.判断该元素是否是数字 如果是数字 则直接打印
 7 # 5.如果是列表 则循环该列表 获取列表内每一个元素
 8 # 6.判断该元素是否是数字 如果是数字 则直接打印
 9 # 7.如果是列表 则循环该列表 获取列表内每一个元素
10 def get_num(l):
11     for i in l:
12         if type(i) is int:
13             print(i)
14         else:
15             # 也是for循环 然后判断
16             get_num(i)
17 get_num(l)
18 
19 # for i in []:
20 #     print(i,'懵逼了!')

三元表达式

1 # def my_max(a, b):
2 #     if a > b:
3 #         return a
4 #     else:
5 #         return b

当功能需求仅仅是二选一的情况下 那么推荐使用三元表达式

1 # def my_max(a, b):
2 #     return a if a > b else b

条件成立采用if前面的值 if 条件 else 条件不成立采用else后面的值
三元表达式尽量不要嵌套使用

# res = '干饭' if 10 > 2 else '不干饭'
# print(res)
# res = '干饭' if 10 > 2 else ('不管饭' if 2 >5 else '写的啥!')
# print(res)
1 # is_free = input('电影是否收费(y/n)>>>:').strip()
2 # if is_free == 'y':
3 #     print('收费')
4 # else:
5 #     print('免费')
6 # print('收费' if is_free == 'y' else '免费')
7 username = input('username>>>:')
8 res = 'NB' if username == 'jason' else 'SB'
9 print(res)

 

 

算法之二分法

什么是算法
就是解决问题的高效方法

二分法
常见的算法:冒泡算法, 二分法,选择排序

 1 l = [1, 2, 3, 4, 5, 6, 11, 22, 34, 44, 55, 66, 67, 333, 444]
 2 # 第一种方式
 3 
 4 # for i in l:
 5 #     if i == 66:
 6 #         print('找到了')
 7 
 8 # 1. 排序
 9 # l.sort()
10 def my_half(target_num, l):
11     # target_num = 34
12     # l
13     # 1. 从列表中去一个中间值
14     middle_index = len(l) // 2  # 7
15 
16     # 2. 比较
17     if target_num > l[middle_index]:
18         # 要找的元素在右边
19         l_right = l[middle_index + 1:]
20         my_half(target_num, l_right)
21         print(l_right)
22     elif target_num < l[middle_index]:
23         # 要找的元素一定在左边
24         l_left = l[:middle_index]
25         my_half(target_num, l_left)
26         print(l_left)
27     else:
28         print('找到了,哈哈哈哈')

 

 

列表生成式

 1 name_list = ['jason', 'kevin', 'tony', 'jerry']
 2 # 给列表中所有的人名加上_DSB后缀
 3 '''传统做法'''
 4 # 1.定义一个空列表
 5 # new_list = []
 6 # 2.for循环老列表
 7 # for name in name_list:
 8 # 3.生成新的名字
 9 # new_name = '%s_DSB'%name
10 # 4.添加到新的列表中
11 # new_list.append(new_name)
12 # print(new_list)
13 '''列表生成式'''
14 # res = ['%s_DSB' % name for name in name_list]
15 # print(res)

传统做法

 1 # 1.定义一个空列表
 2 # new_list = []
 3 # # 2.for循环老列表
 4 # for name in name_list:
 5 #     # 3.生成新的名字
 6 #     if name == 'jason':
 7 #         continue
 8 #     else:
 9 #         new_name = '%s_DSB'%name
10 #         # 4.添加到新的列表中
11 #         new_list.append(new_name)
12 # print(new_list)
13 '''列表生成式'''
14 # res = ['%s_DSB' % name for name in name_list if name != 'jason']
15 # print(res)

字典生成式

 1 # l1 = ['name', 'age', 'hobby']
 2 # l2 = ['jason', 18, 'read']
 3 # new_dict = {}
 4 # for i in range(len(l1)):
 5 #     new_dict[l1[i]] = l2[i]
 6 # print(new_dict)
 7 
 8 # count = 0
 9 # for i in l1:
10 #     print(count,i)
11 #     count += 1
12 
13 # 枚举
14 '''
15 enumerate(l1)
16     针对该方法使用for循环取值 每次会产生两个结果
17         第一个是从0开始的数字
18         第二个是被循环对象里面的元素
19     还可以通过start参数控制起始位置
20 '''
21 # for i, j in enumerate(l1, start=1):
22 #     print(i, j)
23 
24 
25 name_list = ['jason', 'kevin', 'tony', 'jerry']
26 # res = {i: j for i, j in enumerate(name_list) if j != 'jason'}
27 # print(res)
28 
29 # res1 = {i for i,j in enumerate(name_list)}
30 # print(res1,type(res1))
31 
32 
33 # 迭代器
34 res2 = (i for i,j in enumerate(name_list))
35 print(res2)

 

 

匿名函数

 1 # 匿名函数:没有名字的函数
 2 """
 3 语法格式
 4     lambda 形参:返回值
 5 """
 6 # print(lambda x:x**2)
 7 # def index():
 8 #     pass
 9 # print(index)
10 # print((lambda x: x ** 2)(2))
11 # res = lambda x: x ** 2
12 # print(res(2))
13 
14 '''匿名函数一般不会单独使用 都是配合其他函数一起使用'''
15 # map()  映射
16 # l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
17 # def index(n):
18 #     return n ** 2
19 # print(list(map(lambda x:x**2, l)))

 

 

 

posted @ 2022-01-11 17:32  colagirl  阅读(58)  评论(0)    收藏  举报