首页 > 编程语言 >Python学习路程——Day14

Python学习路程——Day14

时间:2022-10-13 22:55:07浏览次数:52  
标签:access 路程 name Python Big list Day14 user print

Python学习路程——Day14

算法简介

1、什么是算法

'''
	算法就是解决问题的有效方法,并不是所有的算法都很高效、也不是所有的算法都合格。
'''

2、算法应用场景

'''
	推荐算法:
		抖音视频推送、淘宝商品推送
	成像算法:
		AI相关、人脸识别
'''

二分法

1、什么是二分法

'''
	几乎是算法中最简单的算法,采用的是取中间值后、然后进行比较、之后再根据对比结果,然后在决定是否采取下一步的方案,以此循环。
	
	二分法的使用要求:
		带查找的数据集必须要有序
	
	二分法的缺陷:
		针对开头结尾的数据,查找效率很低

常见的算法的原理、以及伪代码
	二分法、冒泡、快排、堆排、桶排、插入、链表(约瑟夫问题、判断链表是否成环)
'''

2、二分法

'''
二分法实现:
'''
number_list = [777, 888, 999,  11, 22, 33, 44, 55, 66, 77, 88, 99, 111, 222, 333, 444, 555, 666]
number_list.sort() # sort方法可以对列表进行升序排序
def list_sort(list_name, target_num):
    if len(list_name) == 0:
        print('目标数值不存在!')
        return
    index = len(list_name) // 2
    if target_num > list_name[index]:
        right_number_list = list_name[index+1:]
        print(right_number_list)
        return list_sort(right_number_list, target_num)
    elif target_num < list_name[index]:
        left_number_list = list_name[:index]
        print(left_number_list)
        return list_sort(left_number_list, target_num)
    else:
        print('您找到了您需要的目标值:', list_name[index])

target_num = eval(input('请输入您要查找的数值:'))
list_sort(number_list, target_num)

三元表达式

三元表达式的作用与使用

'''
三元表达式主要作用是:
	简化步骤:代码简单且只有一行,那么可以直接再冒号后面直接编写
	适用于二选一的情况下,使用三元表达式,比较简便
	不推荐使用三元表达式嵌套
'''
name = 'Maria'
if name == 'Maria':
    print('美人')
else:
    print('小美女')

# 变量名 = if语句块  判断条件  else  else语句块
res = '老师' if name == 'Maria' else '同学'
print(res)

生成式

1、列表生成式

'''

'''
list_name = ['Jason', 'Tony', 'Tom', 'Tank', 'Maria', 'Jerry']
new_list = []
for suffix in list_name:
    date = f'{suffix}_Big'
    new_list.append(date)
print(new_list) # ['Jason_Big', 'Tony_Big', 'Tom_Big', 'Tank_Big', 'Maria_Big', 'Jerry_Big']

# 新列表的变量名 = [接收for循环的变量名 + '需要再原列表的基础上添加的数据' for 变量名 in 老列表]
new_list = [suffix+'_Big' for suffix in list_name]
print(new_list) # ['Jason_Big', 'Tony_Big', 'Tom_Big', 'Tank_Big', 'Maria_Big', 'Jerry_Big']

# 新列表的变量名  = [接收for循环的变量名 + '需要再原列表的基础上添加的数据'
# for 变量名 in 老列表 if 接收for循环的变量名 == '老列表内需要添加数据的变量名']
new_list = [suffix+'_Big' for suffix in list_name if suffix == 'Jason']
print(new_list) # ['Jason_Big']

# 新列表的变量名  = ['更换之后的数据值' if 接收for循环的变量名 == '需要被改变的变量名' else
# '更换之后的数据值' for 变量名 in 老列表]
new_list = ['_Big' if suffix == 'Jason' else '_Small' for suffix in list_name]
print(new_list) # ['_Big', '_Small', '_Small', '_Small', '_Small', '_Small']

2、字典生成式

'''
enumerate()是python的内置函数
enumerate在字典上是枚举、列举的意思
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
enumerate多用于在for循环中得到计数
'''
string_one = '你好'
for i, j in enumerate(string_one):
    print(i, j)
    # 0 你
    # 1 好

dict_one = {i: j for i, j in enumerate(string_one)}
print(dict_one)  # {0: '你', 1: '好'}

3、集合生成器

'''

'''
string_two = 'you are my baby'
set_one = {i for i in string_two}
print(set_one)  # {'a', 'u', ' ', 'e', 'o', 'b', 'y', 'm', 'r'}

匿名函数

'''
没有名字的函数 需要使用关键字lambda
语法结构
	lambda 形参:返回值
使用场景
	lambda a,b:a+b
匿名函数一般不单独使用 需要配合其他函数一起用
'''

常见的内置函数

1.map()	映射
    l1 = [1, 2, 3, 4, 5]
    # def func(a):
    #     return a + 1
    res = map(lambda x:x+1, l1)
    print(list(res))
2.max()\min()
	l1 = [11, 22, 33, 44]
 	res = max(l1)
    
	d1 = {
    'zj': 188,
    'jason': 288,
    'berk': 398,
    'oscar': 998
	}
    def func(a):
        return d1.get(a)
    # res = max(d1, key=lambda k: d1.get(k))
    res = max(d1, key=func)
    print(res)
3.reduce
	 # reduce  传多个值 返回一个值
    from functools import reduce
    l1 = [11, 22, 33, 44, 55, 66, 77, 88]
    res = reduce(lambda a, b: a * b, l1)
    print(res)
'''好奇执行流程可以使用debug模式简单看看'''

练习

'''
附加题
  有下列用户数据
    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']}
    }
    并有三个函数
        def func1():
            pass
        def func2():
            pass
        def func3():
            pass
    要求:调用上述三个函数的时候需要从user_data中校验用户身份是否正确
    并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表
    func1是1、func2是2、func3是3
    并且一旦用户登录成功之后后续函数的调用不再校验用户身份
    请思考如何获取函数功能编号 如何校验用户身份 如何校验权限
    ps:装饰器知识         附赠:实现上述主体功能即可 其他扩展优化功能可暂且不写
            
'''
'''
有下列用户数据
    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']}
    }
    并有三个函数
        def func1():
            pass
        def func2():
            pass
        def func3():
            pass
    要求:调用上述三个函数的时候需要从user_data中校验用户身份是否正确
    并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表
    func1是1、func2是2、func3是3
    并且一旦用户登录成功之后后续函数的调用不再校验用户身份
    请思考如何获取函数功能编号 如何校验用户身份 如何校验权限
    ps:装饰器知识         附赠:实现上述主体功能即可 其他扩展优化功能可暂且不写        
'''

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']}
}
login_data = {
    'is_login':  False,
    'access': [],
    'user_name': []
}
# 定义最外层函数 用
def outter(user_limit):
    def center(func_name):
        def inner(*args, **kwargs):
            global is_login
            if login_data['is_login'] == True:
                access = login_data['access']
                user_name = login_data['user_name']
                if user_limit in access:
                    res = func_name(*args, **kwargs)
                    print(f'该用户拥有{func_name}')
                    return res
                else:
                    print(f'该用户{user_name}没有{user_limit}的权限')

            else:
                user_id = input('请输入您的识别id:')
                if user_id not in user_data:
                    print('查无此人')
                else:
                    user_name = input('请输入您的账号>>>:')
                    pass_word = input('请输入您的密码>>>:')
                    if user_name == user_data[user_id]['name'] and pass_word == user_data[user_id]['pwd']:
                        access = user_data[user_id]['access']
                        login_data['is_login'] = True
                        login_data['access'] = access
                        login_data['user_name'] = user_name
                        if user_limit in access:
                            res = func_name(*args, **kwargs)
                            print(f'该用户拥有{func_name}')
                            return res
                    else:
                        print(f'用户{user_name}没有{user_limit}的权限')
        return inner
    return center

@outter('1')
def fun1():
    print('权限1')

@outter('2')
def fun2():
    print('权限2')

@outter('3')
def fun3():
    print('权限3')


fun1()
fun2()
fun3()
            
'''
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']}
}

标签:access,路程,name,Python,Big,list,Day14,user,print
From: https://www.cnblogs.com/HaiMan/p/16790029.html

相关文章

  • python 编码规范起源:PEP8 编码规范中文版
     PEP:8标题:Python代码的样式指南版:c451868df657最后修改:​​2016-06-0810:43:53-0400(2016年6月8日星期三)​​作者:GuidovanRossum<guidoatpython.org>,BarryWarsaw<b......
  • python re 模块及正则表达式调用认识(1)
           最近用到正则表达式,虽然看了学习了一些,但是不成体系,没有深刻认识,所以来看官方文档学习下,进行一个半汉化的翻译吧,网上查了很多都不是特别全面,要不就不是纯粹......
  • python编码类型转换及字符集探讨
    一直遇到python编码的问题。常常抓取的网页数据信息,邮件收发信息,涉及到文字处理的,都时不时出现编码的问题。终于,觉得有必要认真了解下这个编码过程和出现对应的问题如何解决......
  • 关于python class
    1、class的定义classX(Y)"MakeaclassnamedXthatis-aY."classX(object):def__init__(self,J)"classXhas-a__init__thattakesselfandJpar......
  • python算法简介与各种生成式
    今日内容概要算法简介及二分法三元表达式各种生成式匿名函数重要内置函数常见内置函数今日内容详细算法简介及二分法1.什么是算法 算法就是解决问题的有校......
  • python函数及算法
    算法二分法二分算法图什么是算法?​ 算法是高效解决问题的办法。需求:有一个按照从小到大顺序排列的数字列表,查找某一个数字#定义一个无序的列表nums=[3,4,5,67,......
  • python爬虫爬取国家科技报告服务系统数据,共计30余万条
    python爬虫爬取国家科技报告服务系统数据,共计30余万条按学科分类【中图分类】共计三十余万条科技报告数据爬取的网址:​​https://www.nstrs.cn/kjbg/navigation​​!!!分析网站......
  • python使用xml.dom.minidom写xml节点属性会自动排序问题解决
    1.背景及问题一个xml文件,过滤掉部分节点,生成新的xml文件,但是生成后,发现节点的属性顺序变化了,根据key的字母信息排了序。如原始信息:<stringtypename="time_type"length......
  • day14学习内容分享
    今日内容概要算法简介及而二分法三元表达式各种生成式匿名函数重要内置函数常见内置函数内容详细算法简介及二分法算法(概念了解)什么是算法算法就是解......
  • python常见的运算符及用法
    ✅个人主页:​​hacker_demo的51CTO博客......