算法简介与二分法
| 1.什么是算法 |
| 算法就是解决问题的有效方法 不是所有的算法都很高效也有不合格的算法 |
| 2.算法应用场景 |
| 推荐算法(抖音视频推送 淘宝商品推送) |
| 成像算法(AI相关,图片P图)等等 |
| 3.算法工程师要求 |
| 待遇非常好 但要求也非常高 |
| 4.算法部门 |
| 不是所有的互联网公司都养的起算法部门 只有大公司才有实力和愿意养算法人才 |
| 算法部门类似药品研发部分 |
| 5.二分法 |
| 是算法中最简单的算法 甚至都算不上是算法 |
二分法
| ''' |
| 二分法使用要求 |
| 要求,原列表有一定规律例如下面 |
| 二分法的缺陷 |
| 针对开头结尾的数据 查找效率很低 |
| ''' |
| |
| |
| l1 = [1, 2, 3, 6, 9, 16, 30, 200, 500, 1000] |
| |
| |
| |
| |
| def get_min_num(num, li_list): |
| if not len(li_list): |
| print('没在列表里找到') |
| return |
| if num == li_list[0]: |
| print(f'恭喜你找到了,{num}') |
| return |
| if num == li_list[-1]: |
| print(f'恭喜你找到了,{num}') |
| return |
| |
| mi_num = len(li_list) // 2 |
| if li_list[mi_num] > num: |
| get_min_num(num, li_list[:mi_num]) |
| elif li_list[mi_num] < num: |
| get_min_num(num, li_list[mi_num + 1:]) |
| else: |
| print(f'恭喜你找到了,{num}') |
| |
| |
| get_min_num(int(input()), li_list=l1) |
| |
常见算法的原理以及伪代码
二分法、冒泡、快拍、插入、堆排、桶排、数据结构(链表 约瑟夫问题 如何判断链表是成环)
三元表达式
| 一些简单的代码可以写到一行内 |
| 简化步骤1:代码简单并且只有一行 那么可以直接卸载冒号后面 |
| name = 'aa' |
| if name == 'aa':print('gg') |
| else:print('mm') |
| |
| 三元表达式 |
| res = 'gg' if name == 'aa' else 'mm' |
| print(res) |
| ''' |
| 数据值1 if 条件 else 数据值2 |
| 条件成立使用数据值1 不成立使用数据值2 |
| 当结果是二选一的情况下 使用三元表达式较为简便 |
| 并且不推荐多个三元表达式嵌套 |
| |
| ''' |
各种生产式、表达式、推导式
| name_list = ['1','2','3'] |
| |
| new_list=[] |
| for i in name_list: |
| new_list.append(i+'__a') |
| 普通的 |
| |
| |
| new_list = [i+'__a' for i in name_list] |
| |
| new_list = [i+'__a' for i in name_list if i == '1'] |
| |
| |
| new_list = ['大佬' if i == '2' else '菜鸟' for i in name_list if i != '3'] |
| |
| |
| s1 = 'hello world' |
| d1={} |
| for i,j in enumerate(s1,1) |
| d1[i]=j |
| d2 = {i:j for i,j in enumerate(s1,0)} |
| |
| |
| |
| se = {i for i in 'hello'} |
| |
| |
| t1 = (i+'1' for i in 'hello') |
| for j in t1: |
| print(j) |
| |
匿名函数
| 没有名字的函数 需要使用关键字lambda |
| 语法结构 |
| lambda 可以有参数:直接返回冒号后面的数据值 |
| |
常见内置函数
| 1.map() 映射 |
| l1 = [1,2,3,4,5] |
| a = map(lambda x:x+1,l1) |
| print(a) |
| |
| 2.max,min |
| res = max(l1) |
| d1 = { |
| 'asd':12, |
| 'dasd':18, |
| '123':20 |
| } |
| res = max(d1,key=lambda x:d1.get(x)) |
| 3.reduce |
| from functools import reduce |
| res = reduce(l1) |
作业
| ''' |
| 1. |
| 附加题 |
| 有下列用户数据''' |
| '''user_data = { |
| '1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']}, |
| '2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']}, |
| '3': {'name': 'oscar', 'pwd': '222', 'access': ['1']} |
| }''' |
| '''并有三个函数''' |
| |
| ''' |
| 要求: 调用上述三个函数的时候需要从user_data中校验用户身份是否正确 |
| 并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表 |
| func1是1、func2是2、func3是3 |
| 并且一旦用户登录成功之后后续函数的调用不再校验用户身份 |
| 请思考如何获取函数功能编号 |
| 如何校验用户身份 |
| 如何校验权限 |
| ps: 装饰器知识 |
| 附赠: 实现上述主体功能即可 |
| 其他扩展优化功能可暂且不写 |
| ''' |
| |
| ''' |
| 1.先编写校验用户身份的装饰器 |
| 2.然后再考虑如何保存用户登录状态 |
| 3.再完善各种需求 |
| ''' |
| user_data = { |
| '1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']}, |
| '2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']}, |
| '3': {'name': 'oscar', 'pwd': '222', 'access': ['1']} |
| } |
| islogin = [] |
| |
| |
| def outer_p(data): |
| def outer(func): |
| def inner(*args, **kwargs): |
| if not islogin: |
| print('请先登录') |
| user_name = input('请输入用户名') |
| user_pwd = input('请输入密码') |
| for k, v in data.items(): |
| if v['name'] == user_name and v['pwd'] == user_pwd: |
| islogin.append(v['name']) |
| if func.__name__[-1] in v['access']: |
| res = func(*args, **kwargs) |
| return res |
| else: |
| print('你没有权限执行') |
| else: |
| print('用户名或密码不正确') |
| else: |
| for k, v in data.items(): |
| if v['name'] == islogin[0]: |
| if func.__name__[-1] in v['access']: |
| res = func(*args, **kwargs) |
| return res |
| else: |
| print('你没有权限执行') |
| |
| return inner |
| |
| return outer |
| |
| |
| @outer_p(user_data) |
| def func1(): |
| print('1') |
| pass |
| |
| |
| @outer_p(user_data) |
| def func2(): |
| print('2') |
| pass |
| |
| |
| @outer_p(user_data) |
| def func3(): |
| print('3') |
| pass |
| |
| |
| while True: |
| func1() |
| func2() |
| func3() |
| input('按任意键继续执行') |
| |
本文作者:clever-cat
本文链接:https://www.cnblogs.com/clever-cat/p/16789414.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步