博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于装饰器的一道经典例题
阅读量:6600 次
发布时间:2019-06-24

本文共 3826 字,大约阅读时间需要 12 分钟。

程序要求: 启动程序,首页面应该显示成如下格式: 欢迎来到博客园首页 1:请登录 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 8:退出程序 2),用户输入选项,3~6选项必须在用户登录成功之后,才能访问成功。 3),用户选择登录,用户名密码从register文件中读取验证,三次机会,没成功则结束整个程序运行,     成功之后,可以选择访问3~6项,访问页面之前,必须要在log文件中打印日志,     日志格式为-->用户:xx 在xx年xx月xx日 执行了 %s函数,访问页面时,页面内容为:欢  迎xx用户访问评论(文章,日记,收藏)页面 4),如果用户没有注册,则可以选择注册,注册成功之后,      可以自动完成登录(完成自动登录+5分),然后进入首页选择。 5),注销用户是指注销用户的登录状态,使其在访问任何页面时,必须重新登录。 6),退出程序为结束整个程序运行。
import timestatus_dic = {    'username': None,    'status': False,}flag1 = Truedef login(*args,**kwargs):    i = 0    while i < 3:        if args:            status_dic['username'] = args[0]            status_dic['status'] = True            return True        else:            username = input('请输入用户名:').strip()            password = input('请输入密码:').strip()            with open('register',encoding='utf-8') as f1:                for line in f1:                    line_list = line.strip().split()                    if username == line_list[0] and password == line_list[1]:                        print('登录成功')                        status_dic['username'] = username                        status_dic['status'] = True                        return True                else:                    print('输入不正确,请重新输入,还剩%s机会' % (2-i))                    if i == 2: return Quit()                i += 1def register(*args, **kwargs):    flag = True    while flag:        username = input('请输入要注册的用户名:')        f1 = open('register',encoding='utf-8')        for i in f1:            if username in i:                print('用户名重复,请重新输入')                f1.close()                break        else:            f1.close()            password = input('请输入要注册的密码:').strip()            f2 = open('register', encoding='utf-8', mode='a')            f2.write('\n{}\t{}'.format(username, password))            f2.close()            print('恭喜你,注册成功,已经自动为您登录,现在跳转到首页...')            return login(username,password)def wrapper(func):     #func=inner2    def inner1(*args,**kwargs):        if status_dic['status']:            ret = func(*args,**kwargs)            return ret        else:            print('请先进行登录')            if login():                ret = func(*args, **kwargs)                return ret    return inner1def log_record(func):      #func=article    def inner2(*args,**kwargs):        struct_time = time.localtime()        time_now = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)        with open('log_func','a',encoding='utf-8') as f1:            f1.write('用户:%s 在%s 执行了 %s函数\n'%(status_dic['username'],time_now,func.__name__))        ret = func(*args,**kwargs)        return ret    return inner2@wrapper  # article = wrapper(article)      artical=wrapper(inner2)    外面的artical=inner1@log_record  # artical = log_record(article)   外面的artical=inner2def article():    print('欢迎%s访问文章页面' % status_dic['username'])@wrapper@log_recorddef diary():    print('欢迎%s访问日记页面' % status_dic['username'])@wrapper@log_recorddef comment():    print('欢迎%s访问评论页面' % status_dic['username'])@wrapper@log_recorddef enshrine():    print('欢迎%s访问收藏页面' % status_dic['username'])def login_out():    status_dic['username'] = None    status_dic['status'] = False    print('注销成功')def Quit():    global flag1    flag1 = False    return flag1choice_dict = {    1: login,    2: register,    3: article,    4: diary,    5: comment,    6: enshrine,    7: login_out,    8: Quit,}while flag1:    print('欢迎来到博客园首页\n1:请登录\n2:请注册\n3:文章页面\n4:日记页面\n5:评论页面\n6:收藏页面\n7:注销\n8:退出程序')    choice = input('请输入您选择的序号:').strip()    if choice.isdigit():        choice = int(choice)        if 0 < choice <= len(choice_dict):                choice_dict[choice]()        #artical()     inner1()     login()   register()        else:            print('您输入的超出范围,请重新输入')    else:        print('您输入的选项有非法字符,请重新输入。')
View Code

 

转载于:https://www.cnblogs.com/leiwei123/p/8762468.html

你可能感兴趣的文章
Portal-Basic Java Web 应用开发框架:应用篇(八) —— Freemarker 整合
查看>>
jquery 获取标签子元素的数目
查看>>
1039: C语言程序设计教程(第三版)课后习题9.4
查看>>
swift-----启动显示别的xib 文件
查看>>
jQuery easyui treegrid无法传参到后台bugger一记
查看>>
JAVA8 HashMap 新特性
查看>>
OOCSS的概念和思路
查看>>
页面在谷歌浏览器和IE浏览器顶部多出空白行,火狐显示正常
查看>>
控制台
查看>>
My Linux API
查看>>
KVM-快照管理
查看>>
Python学习笔记(十四)
查看>>
数据库性能问题排查
查看>>
Python基础-画图:matplotlib.pyplot.scatter
查看>>
学习微信小程序之css5
查看>>
LC_328. Odd Even Linked List
查看>>
hasLayout与BFC的触发条件
查看>>
WebAPI 实现前后端分离
查看>>
emWin 移植 - 基于红牛开发板
查看>>
hdu1999 不可摸数
查看>>