首页 > 编程语言 >python--第十五课

python--第十五课

时间:2022-10-14 16:58:10浏览次数:40  
标签:__ 迭代 python res -- 第十五 l1 print user

昨日内容回顾

  • 作业讲解

    1.装饰器
    2.递归函数
    
  • 算法简介及二分法

    算法:解决问题的方法
    二分法:每次取一半
    def get_middle(l1,target_num):
        if len(l1) == 0:
            print('找不到')
            return
    	 middle_index = len(l1) // 2	
      	 if target_num > l1[middle_index]:
            right_l1 = l1[middle_index+1:]
            return get_middle(right_l1,target_num)
     	 elif target_num < l1[middle_index]:
            left_l1 = l1[:middle_index]
            return get_middle(left_l1,target_num)
     	 else:
            print('找到了')
    
  • 三元表达式

    二选一
    	数据值1 if 条件 else 数据值2
    
  • 各种生成式

    l1 = [i+'嘿' for i in 'hello' if i != 'h']
    d1 = {i:j for i,j in enumerate('hello')}
    s1 = {i for i in 'hello'}
    
  • 匿名函数

    lambda 形参:返回值
    
  • 重要内置函数

    map 映射
    max\min	最大最小值
    reduce 传多个返回一个
    

今日内容概要

  • 作业讲解
  • 重要内置函数
  • 常见内置函数
  • 可迭代对象
  • 迭代器对象
  • for循环内部原理
  • 异常处理

今日内容详细

作业讲解

有下列用户数据
    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']}
}
"""
1.先写模板
2.再写用户校验
3.记录用户登录状态
4.再考虑用户权限问题
"""
is_login = {
    'login_status': False,  # 记录用户是否登录
    'user_access': None  # 记录登录用户的权限
}

def login_auth(func_id):
    def outer(func_name):
        def inner(*args, **kwargs):
            # 6.先校验用户是否登录
            if is_login.get('login_status'):
                # 8.也需要校验功能编号是否在当前登录的用户权限中
                if func_id not in is_login.get('user_access'):
                    print(f'您没有功能编号为{func_id}的函数执行权限')
                    return
                res = func_name(*args, **kwargs)
                return res
            # 1.先获取用户的编号
            user_id = input('请输入您的编号>>>:').strip()
            # 2.校验用户编号是否存在
            if user_id not in user_data:
                print('用户编号不存在 无法完成身份校验 请滚蛋!!!')
                return
            # 3.获取用户的用户名和密码
            username = input('请输入您的用户名>>>:').strip()
            password = input('请输入您的密码>>>:').strip()
            # 4.获取用户编号对应的真实数据进行比对
            user_dict = user_data.get(user_id)
            if user_dict.get('name') == username and user_dict.get('pwd') == password:
                # 5.登录成功之后修改字典中登录状态
                is_login['login_status'] = True
                # 6.记录当前登录用户的权限编号
                is_login['user_access'] = user_dict.get('access')
                # 7.校验当前函数编号是否在当前用户权限列表内
                if func_id in user_dict.get('access'):
                    res = func_name(*args, **kwargs)
                    return res
                else:
                    print(f'您没有功能编号为{func_id}的函数执行权限')
            else:
                print('用户名或密码错误')

        return inner
    return outer


@login_auth('1')
def func1():
    print('from func1')


@login_auth('2')
def func2():
    print('from func2')


@login_auth('3')
def func3():
    print('from func3')


func1()
func2()
func3()

重要内置函数

# zip
# l1 = [11, 22, 33, 44, 55]
# l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
# l3 = [1, 2, 3, 4, 5]
# res = zip(l1, l2, l3)
# print(list(res))
# l1 = [11, 22, 33]
# l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
# l3 = [1, 2, 3, 4]
# res = zip(l1, l2, l3)
# print(list(res))

# filter
# l1 = [11, 22, 33, 44, 55, 66, 77, 88]
# res = filter(lambda x: x > 40, l1)
# print(list(res))

# sorted
l1 = [21, 12, 53, 64, 76, 32, 11, 22]
res = sorted(l1)
print(res)  # 默认升序

常见内置函数

# 1.abs()  绝对值
# print(abs(-100))
# print(abs(100))
# 2.all()  所有数据值对应的布尔值为True结果才是True 否则返回False
# print(all([0, 1, 2, 3]))
# print(all([1, 2, 3, True]))
# 3.any()  所有数据值对应的布尔值有一个为True结果就是True 否则返回False
# print(any([0, None, '', 1]))
# print(any([0, None, '']))
# 4.bin() oct() hex() int()
# 5.bytes()  转换成bytes类型
# s1 = '今天周五 内容也很简单'
# print(s1.encode('utf8'))
# print(bytes(s1, 'utf8'))
# 6.callable()  判断名字是否可以加括号调用
# name = 'jason'
# def index():
#     print('from index')
# print(callable(name))  # False
# print(callable(index))  # True
# 7.chr() ord()  基于ASCII码表做数字与字母的转换
# print(chr(65))  # A
# print(ord('A'))  # 65
# 8.dir()  返回括号内对象能够调用的名字
# print(dir('hello'))
# 9.divmod()  元组 第一个数据为整除数 第二个是余数
# res = divmod(100, 2)
# print(res)  # (50, 0)
# res = divmod(100, 3)
# print(res)
"""
总数据     每页展示的数据     总页码
100         10              10
99          10              10
101         10              11
"""
# page_num, more = divmod(9999, 20)
# print(divmod(99, 10))  # (9, 9)
# if more:
#     page_num += 1
# print('总页码为:', page_num)  # 总页码为: 500
# 10.enumerate()  枚举
# 11.eval() exec()  能够识别字符串中的python并执行
# s1 = 'print("哈哈哈")'
# eval(s1)
# exec(s1)
# s2 = 'for i in range(100):print(i)'
# eval(s2)  # 只能识别简单的python代码 具有逻辑性的都不行
# exec(s2)  # 可以识别具有一定逻辑性的python代码
# 12.hash()  哈希加密
# print(hash('jason'))
# 13.id() input() isinstance()
# 14.map() max() min()
# 15.open()
# 16.pow()  幂指数(次方)
# print(pow(2, 2))
# print(pow(2, 3))
# print(pow(2, 4))
# 17.range()
# 18.round() 四舍五入
# print(round(98.3))
# print(round(98.6))
# 19.sum()
# print(sum([11, 22, 33, 44, 55, 66]))
# 20.zip()

可迭代对象

1.可迭代对象
	对象内置有__iter__方法的都称为可迭代对象
	"""
	1.内置方法  通过点的方式能够调用的方法
	2.__iter__  双下iter方法
	"""
2.可迭代对象的范围
	不是可迭代对象
    	int float bool 函数对象
	是可迭代对象
    	str list dict tuple set 文件对象
3.可迭代的含义
	"""
	迭代:更新换代(每次更新都必须依赖上一次的结果)
		eg:手机app更新
	"""
	可迭代在python中可以理解为是否支持for循环

迭代器对象

1.迭代器对象
	是由可迭代对象调用__iter__方法产生的
	迭代器对象判断的本质是看是否内置有__iter__和__next__
2.迭代器对象的作用
	提供了一种不依赖于索引取值的方式
 	正因为有迭代器的存在 我们的字典 集合才能够被for循环
3.迭代器对象实操
	 s1 = 'hello'  # 可迭代对象
    res = s1.__iter__()  # 迭代器对象
    print(res.__next__())  # 迭代取值 for循环的本质
	 一旦__next__取不到值 会直接报错
4.注意事项
	可迭代对象调用__iter__会成为迭代器对象 迭代器对象如果还调用__iter__不会有任何变化 还是迭代器对象本身

for循环的本质

for 变量名 in 可迭代对象:
    循环体代码
"""
1.先将in后面的数据调用__iter__转变成迭代器对象
2.依次让迭代器对象调用__next__取值
3.一旦__next__取不到值报错 for循环会自动捕获并处理
"""

异常捕获/处理

1.异常
	异常就是代码运行报错 行业俗语叫bug
	代码运行中一旦遇到异常会直接结束整个程序的运行 我们在编写代码的过程中药尽可能避免
2.异常分类
	语法错误
    	不允许出现 一旦出现立刻改正 否则提桶跑路
	逻辑错误
    	允许出现的 因为它一眼发现不了 代码运行之后才可能会出现
3.异常结构
	错误位置
 	错误类型
 	错误详情

作业

1.整理今日内容及博客 录音 单词
2.整理本周疑难杂症 针对性解决
3.周日晚编写本周内容总结

标签:__,迭代,python,res,--,第十五,l1,print,user
From: https://www.cnblogs.com/tengyifan888/p/16792103.html

相关文章

  • Muduo库之同步原语
    Atomic在Atomic.h文件中定义了原子操作类类型AtomicIntegerT<T>,它使用了GCC内置的原子操作来实现。原子操作在多线程开发中经常用到,比如计数器、序列产生器等。这些......
  • P7870 「Wdoi-4」兔已着陆 题解
    大家好,由于我非常喜欢线段树,所以我用线段树切了这题。提供一种复杂度为\(\mathcal{O}(n\log^2n)\)线段树二分的做法。我们想一下,我们要用线段树来优化什么操作。我们......
  • SpringBoot集成Xxl-Job
    Xxl-Job介绍开源社区:https://www.xuxueli.com/xxl-job下载地址:https://gitee.com/xuxueli0323/xxl-job.gitXXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、......
  • 691. 贴纸拼词
    题目描述给一个列表ss,里面存的是不同的单词贴纸,单词只包含小写字母,可以把贴纸内的每个字母单独切割,给一个目标t,当不限制每个贴纸使用次数时,问要拼出目标t需要的最小贴纸......
  • 图片添加水印倾斜、铺满最全工具类
    可以动态修改参数调整倾斜以及字体大小、颜色等。packagecom.seatrend.electronicrecord.utils;importsun.font.FontDesignMetrics;importjavax.imageio.ImageIO;......
  • 团队结构现代化
    从组件团队到Spotify模型遗留系统中的团队结构  首先,按照技术或职能(functional)来划分团队或部门,无形中增加了组织壁垒,造成了不必要的沟通成本。因为一个围绕用户构......
  • 02 设备树的格式 DTS文件
    参考博客:https://www.cnblogs.com/zongzi10010/p/10793074.htmlDeviceTree详解_pwl999的博客-CSDN博客_devicetree1dtc命令dtc-hUsage:dtc[options]<inputf......
  • 替换ZABBIX界面logo
    项目场景:开发一个运维系统,需要内嵌zabbix,但是zabbix的logo太过于显眼,难于交付问题描述:起初想到要修改zabbix界面,那就得修改zabbix的源码咯,所以起初就往以源码的方式安装za......
  • spring学习笔记
    2022年10月14日开始学习02为什么要学spring?使用企业级开发,简化开发IocAop技术框架整合mybatishibernate....03初识Spring官网:https://spring.io/......
  • spdlog 学习记录
    1.下载spdlog  地址:github:https://github.com/gabime/spdlog  gitclone至本地文件夹D:\git\codeClone; 文件夹名为:spdlog-12.安装spdlog (window版本)......