Python实战一
要求:用户输入用户名和密码错误三次,就对该用户进行锁定,不让其进行登录。
def match(name,pwd): '''匹配用户输入的信息,进行判断''' falg = True while falg: with open("test",mode="r",encoding="utf8") as f_read,\ open("test2",mode="r",encoding="utf8") as f1_read: fread = f_read.readlines() f1read = f1_read.readlines() for lines in f1read:#循环黑名单里的内容 if name == lines:#判断是否在黑名单里,在就锁定退出 falg = False#退出while循环 print("This user has been locked!") if falg ==False: break #退出黑名单循环 for line in fread:#循环用户信息库,进行判断是否正确 if name in line and pwd in line : verdict = True#输入正确为True,退出循环 break else: verdict = False#输入错误为False,跳出本次循环 continue if verdict == True:#因为用户信息库里有很多用户信息,so,要拿出来判断 print("welcome %s" % (name)) falg = False if verdict == False: print("You input the username or password error") decide(name)#当输入错误时,调用decide函数 falg = False def decide(name): '''写入用户输入错误的用户名,达到一定的次数,把该用户写入黑名单''' count = 0#计数器,用于记录输入错误用户的次数 with open("test1",mode="a+",encoding="utf8") as f_add: f_add.write("\n"+name)#往文本写错误用户的信息 f_add.seek(0)#把光标移到最开始位置 fadd = f_add.readlines()#获取输入错误用户的信息 for i in range(len(fadd)):#循环列表fadd fadd[i] = fadd[i].replace('\n', '')#去掉每行中的“\n”,用于下面的比对 for line in fadd:#此时的fadd里已没有多余的空格,便于比对 if name == line:#当有重复的用户名,累加一次 count += 1 #匹配后自加1 if count > 2:#当输入3次时,就调用black函数 black(name) def black(name): '''黑名单,输入达到次数的用户,被锁定在黑名单''' with open("test2",mode="a+",encoding="utf8") as f_add: f_add.seek(0)#移动光标至最开始位置 fadd = f_add.readlines()#获取黑名单信息 for line in fadd:#循环黑名单,有重复的用户不会被写入 if name == line : break #有重复的信息退出,不再写入黑名单 f_add.write("\n"+name)#写入黑名单 while True: #用户交互模式 name = input("Please input your username:").strip() if len(name) == 0:#判断用户名输入是否为空,空的话重新输入 print("Input is wrong, please input again") continue if name =="q":#输入q退出 print("ByeBye!") break pwd = input("Please input your password:").strip() match(name, pwd)#调用match函数,匹配输入信息
程序中test为用户的信息库:
michael---111 egon---222 tom---333
test1:为缓存错误用户的信息,对错误用户进行计数。
test2:为存储达到规定次数的用户信息,就是黑名单。使在名单里的用户无法完成登录操作。