• 19


    作业:
    1、编写课上讲解的有参装饰器准备明天默写
    2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,完成自动添加到字典的操作
    3、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
    注意:时间格式的获取
    import time
    time.strftime('%Y-%m-%d %X')
    4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
    5、自定义迭代器实现range功能
    
    
    
    ====================本周选做作业如下====================
    编写小说阅读程序实现下属功能
    # 一:程序运行开始时显示
        0 账号注册
        1 充值功能
        2 阅读小说
    
        3 作品上传
            - 管理员登录
    
    def main():
        while True:
            print('''
                0 账号注册
                1 充值功能
                2 阅读小说
            ''')
    
            choice = input('请输入功能编号: ').strip()
    
    # 二: 针对文件db.txt,内容格式为:"用户名:密码:金额",完成下述功能
    2.1、账号注册
    2.2、充值功能
    
    # 三:文件 "story_class.txt" 存放类别与小说文件路径,
    如下,读出来后可用eval反解出字典
    {
    
        "0":{
                "0":["倚天屠狗记.txt",3],
                "1":["沙雕英雄转.txt",10]
        },
    
        "1":{
                "0":["令人羞耻的爱.txt",6],
                "1":["二狗的妻子与大草原的故事.txt",5]
        },
    
    }
    
    
    3.1、用户登录成功后显示如下内容,根据用户选择,
    显示对应品类的小说编号、小说名字、以及小说的价格
    """
    0 玄幻武侠
    1 都市爱情
    2 高效养猪36技
    """
    
    3.2、用户输入具体的小说编号,提示是否付费,用户输入y确定后,
    扣费并显示小说内容,如果余额不足则提示余额不足
    
    # 四:为功能2.2、3.1、3.2编写认证功能装饰器,要求必须登录后才能执行操作
    
    
    # 五:为功能2.2、3.2编写记录日志的装饰器,
    日志格式为:"时间 用户名 操作(充值or消费) 金额"
    
    
    
    # 附加:
    # 可以拓展作者模块,作者可以上传自己的作品
    # 1、编写课上讲解的有参装饰器准备明天默写
    
    # 2:还记得我们用函数对象的概念,制作一个函数字典的操作吗,来来来,
    # 我们有更高大上的做法,在文件开头声明一个空字典,然后在每个函数前加上装饰器,
    # 完成自动添加到字典的操作
    
    # func_dic = {'1': login, '2': register}
    ''''''
    '''
    func_dic = {}
    
    # 有参装饰器  x接收的是用户输入功能对应的编号
    def outer(x):  # x ---> '1'
        # 无参装饰器
        def wrapper(func):  # func --> login, func --> register
            func_dic[x] = func  # {'1': login, '2': register}
    
            def inner(*args, **kwargs):
                res = func(*args, **kwargs)
    
                return res
    
            return inner
    
        return wrapper
    
    
    @outer('1')  # ---> @wrapper
    def login():
        pass
    
    
    @outer('2')
    def register():
        pass
    
    
    print(func_dic)
    '''
    
    
    # 3、 编写日志装饰器,实现功能如:一旦函数f1执行,
    # 则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
    # 注意:时间格式的获取
    # import time
    # time.strftime('%Y-%m-%d %X')
    '''
    import time
    
    
    # 给被装饰对象添加执行日志装饰器
    def add_log_wrapper(func):
        def inner(*args, **kwargs):
    
            # 在被装饰对象调用前的操作
            # 1) 将被装饰对象的执行日志 写入 log.txt文件中
            with open('log.txt', 'a', encoding='utf-8') as f:
                now_time = time.strftime('%Y-%m-%d %X')
                func_name = func.__name__
                log_str = f'{now_time} {func_name} run
    '
                print(log_str)
                f.write(log_str)
    
            res = func(*args, **kwargs)  # 被装饰对象的调用
    
            # 在被装饰对象调用后的操作
    
            return res
    
        return inner
    
    
    @add_log_wrapper
    def f1():
        # time.sleep(10)
        print('我是f1函数的执行...')
    
    
    @add_log_wrapper
    def f2():
        print('我是f2函数的执行')
    # f1()
    
    f2()
    '''
    
    
    # 4、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
    '''
    def my_iter(obj):  # 字符串、列表、元组、字典、集合、文件
        # 'tank'.__iter__()
        iter_obj = obj.__iter__()
        while True:
            try:
                print(iter_obj.__next__())
    
            except StopIteration:
                break
    
    my_iter('tank')
    '''
    
    
    # 5、自定义迭代器实现range功能
    
    '''
    
    # res = range(1, 10, 2)
    # print(res)
    # print(type(res))  # <class > 都想象成一个迭代器
    
    
    def my_range(start, end, move=1):  # 10-9
        while start < end:
            # print(start)  # 1, 3, 5, 7, 9
            yield start
            start += move  # start += 2
    
    
    
    res1 = range(1, 10, 2)
    # __str__: range(1, 10, 2)
    print(res1)  # range(1, 10, 2) ---> class range()
    
    res2 = my_range(1, 10, 2)  # <generator object my_range at 0x10712e410>
    print(res2)
    
    for line in res1:
        print(line)
    
    for line2 in res2:
        print(line2)
    '''
  • 相关阅读:
    Flink学习四:Flink运行架构
    Flink学习三:Flink安装
    Flink学习二:Flink基本架构
    进程的作业
    并发编程
    粘包解决模板
    网络下载作业
    网络通信远程操控
    网络编程套接字
    网络编程基础之网络协议篇
  • 原文地址:https://www.cnblogs.com/2722127842qq-123/p/13449215.html
Copyright © 2020-2023  润新知