参考代码如下:

1.用户登录程序流程控制代码:

 # 编辑者:闫龙
if __name__ == '__main__':
import UserLoginFuncation
LoclCount=[];
while True:
UserName = input("用户名:>>")
if(UserLoginFuncation.CheckUserLock(UserName)):
print("用户",UserName,"已被锁定")
continue
PassWd = input("密 码:>>")
if(UserLoginFuncation.UserInfo(UserName,PassWd)):
print("欢迎",UserName,"登陆")
break
else:
LoclCount.append(UserName);
print("用户名或密码错误,您还有",3-LoclCount.count(UserName),"次尝试机会")
if(LoclCount.count(UserName) == 3):
UserLoginFuncation.LockUser(UserName)
print("对不起,尝试次数过多",UserName,"用户已被锁定")

用户登录程序流程控制代码(UserLogin.py)

2.用户登录程序调用函数(加入装饰器):

 # 编辑者:闫龙
import UserLoginDeco
import os
@UserLoginDeco.Jude(2)
def CheckUserLock(UserName):
if(os.path.exists("LockUser")):
with open("LockUser","r",encoding="utf8") as ReadLock:
p = ReadLock.readline().split(",")
if(p.count(UserName) != 0):
return True
else:
return False @UserLoginDeco.Jude(3)
def LockUser(UserName):
if(os.path.exists("LockUser")):
LockFile = open("LockUser", "a", encoding="utf8")
LockFile.write(UserName+",")
LockFile.close()
else:
LockFile = open("LockUser", "w", encoding="utf8")
LockFile.write(UserName+",")
LockFile.close() @UserLoginDeco.Jude(1)
def UserInfo(UserName,PassWd):
with open("UserInfo",mode="r",encoding="utf8") as userinfo:
p = userinfo.readlines()
for i in p:
i= i.strip().split(":")
if(i[0] == UserName and i[1] == PassWd):
return True
else:
continue
return False

用户登录程序调用函数(加入装饰器)UserLoginFuncation.py

3.用户登录程序装饰器代码:

 # 编辑者:闫龙
import time
def Jude(InputType):
def ViewUser(UserLoginFunc):
def PrintUser(*args):
if(InputType == 1):
while True:
print("您输入的用户名是",args[0],"密码是",args[1])
choice = input("请问是否继续登陆(y/n)")
if (choice.lower() == "y"):
res = UserLoginFunc(args[0],args[1])
return res
elif(choice.lower() == "n"):
break;
else:
print("您的选择有误")
continue
if(InputType == 2):
print("正在比对用户",args[0],"的信息......")
time.sleep(2)
res = UserLoginFunc(args[0])
return res
if(InputType == 3):
print("正在锁定",args[0],"用户")
time.sleep(2)
res = UserLoginFunc(args[0])
return res
return PrintUser
return ViewUser

用户登录程序装饰器代码(UserLoginDeco.py)

4.用户登录文件(UserInfo):

 egon:123
alex:321
long:666

用户登录文件(UserInfo)

Python练习-装饰器版-为什么我的用户总被锁定的更多相关文章

  1. Python - Django - 装饰器版的登陆校验

    urls.py: from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^login/', vi ...

  2. 【转】【Python】装饰器

    1.闭包 >>> def outer(): ... x = 1 ... def inner(): ... ... return inner >>> foo = ou ...

  3. Python中装饰器(转)

    本文由 伯乐在线 - 7even 翻译,艾凌风 校稿.未经许可,禁止转载!英文出处:Simeon Franklin.欢迎加入翻译组. 好吧,我标题党了.作为 Python 教师,我发现理解装饰器是学生 ...

  4. Python的装饰器实例用法小结

    这篇文章主要介绍了Python装饰器用法,结合实例形式总结分析了Python常用装饰器的概念.功能.使用方法及相关注意事项 一.装饰器是什么 python的装饰器本质上是一个Python函数,它可以让 ...

  5. 13.Python略有小成(装饰器,递归函数)

    Python(装饰器,递归函数) 一.开放封闭原则 ​ 软件面世时,不可能把所有的功能都设计好,再未来的一两年功能会陆续上线,定期更新迭代,软件之前所用的源代码,函数里面的代码以及函数的调用方式一般不 ...

  6. python函数-装饰器

    python函数-装饰器 1.装饰器的原则--开放封闭原则 开放:对于添加新功能是开放的 封闭:对于修改原功能是封闭的 2.装饰器的作用 在不更改原函数调用方式的前提下对原函数添加新功能 3.装饰器的 ...

  7. Python各式装饰器

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  8. Python札记 -- 装饰器补充

    本随笔是对Python札记 -- 装饰器的一些补充. 使用装饰器的时候,被装饰函数的一些属性会丢失,比如如下代码: #!/usr/bin/env python def deco(func): def ...

  9. python基础——装饰器

    python基础——装饰器 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25 ...

随机推荐

  1. 2013长沙网赛E题Travel by Bike

    题目链接:http://acm.zju.edu.cn/changsha/showProblem.do?problemId=26 题意:一个人从一个地方到另一个地方,长度为L,每小时速度为speed,周 ...

  2. Spring Boot快速搭建Spring框架

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development a ...

  3. iOS 字符串NSString 的一些常用方法

    一.字符串创建 1. NSString *str1 = [NSString new]; 2. NSString *str2 = @"字符串内容"; 二.字符串拼接 1. NSStr ...

  4. BZOJ3309 DZY Loves Math(莫比乌斯反演+线性筛)

    一通正常的莫比乌斯反演后,我们只需要求出g(n)=Σf(d)*μ(n/d)的前缀和就好了. 考虑怎么求g(n).当然是打表啊.设n=∏piai,n/d=∏pibi .显然若存在bi>1则这个d没 ...

  5. js浏览器缩放提示

    data() { return { instance: null, isZoomOpen: false }; }, mounted() { const that = this; this.isZoom ...

  6. P2605 [ZJOI2010]基站选址

    题目描述 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci.如果在距离第i个村庄不超过Si的范 ...

  7. Git常用的几个命令

    标签(空格分隔): Git 在本地文件系统中新建目录,放置你的工程: mk dir parkk cd parkk //进入该目录 git init //初始化自己的仓库,默认名称为master 在仓库 ...

  8. Mysql向数据库插入数据时,判断是否存在,若不存在就插入数据

    表中一定要有主键  : select :id,此处的id位置处必须是主键 insert into table_name(id, name, password) select :id, :name, : ...

  9. 51nod 1563 坐标轴上的最大团(今日gg模拟第一题) | 线段覆盖 贪心 思维题

    51nod 1563 坐标轴上的最大团 坐标轴上有n个点,每个点有一个权值.第i个点的坐标是 xi ,权值是 wi .现在对这些点建图.对于点对 (i,j) ,如果 |xi−xj|≥wi+wj ,那么 ...

  10. 洛谷P4233 射命丸文的笔记 【多项式求逆】

    题目链接 洛谷P4233 题解 我们只需求出总的哈密顿回路个数和总的强联通竞赛图个数 对于每条哈密顿回路,我们统计其贡献 一条哈密顿回路就是一个圆排列,有\(\frac{n!}{n}\)种,剩余边随便 ...