python学习-实现用户密码登录,输错三次锁定
作业需求:
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
实现思路:
- 判断用户是否在黑名单,若在黑名单,则将用户锁定
- 判断用户是否存在,若不存在,提示用户不存在
- 若用户存在,判断登录密码是否正确,若正确,则欢迎用户成功登录,提供用户三次密码输入机会,若三次输入错误,则将账户锁定
方式一:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- count = 0 #计数器 username = "aaa" #登录用户名 userpassword = "asd" #登录密码 #读取黑名单用户 f = open("aaa.txt","r") file_list = f.readlines() f.close() lock= [] name = input("登录用户名:") #判断用户是否在黑名单 for i in file_list: line = i.strip("\n") lock.append(line) if name in lock: print("你的账户已锁定,请联系管理员。") else: #如果用户没有在黑名单,判断用户是否存在 if name == username: #如果密码连续输错了三次,锁定账号 while count <3: password = input("登录密码:") if name == username and password == userpassword: print("欢迎%s!"%name) break else: print("账号和密码不匹配") count +=1 else: print("对不起,您的账号连续输错三次密码已被锁定,请联系管理员。") f = open("aaa.txt","w+") li = ['%s'%username] f.writelines(li) f.close() else: print("用户名不存在,请输入正确的用户名。")
方式二:
1 #新建两个文件,account.txt和account_lock.txt,在account中输入aaa 123 2 #其中account.txt采用只读形式,account_lock.txt则采用读写形式 3 import sys,os 4 count = 0 5 name_list = [] 6 while count < 3: 7 name = input("请输入用户名:") 8 lock_file = open("account_lock.txt","r+") #读取黑名单,"r+":打开一个文件用于读写,"r":以只读方式打开文件 9 lock_list = lock_file.readlines() 10 #.readlines():一次读取整个文件,并将内容分析成一个行的列表,与.read()一样 11 #.readline():一次读取一行,当内存不够时使用.readline() 12 for lock_line in lock_list: 13 lock_line = lock_line.strip('\n') 14 if name == lock_line: 15 #如果输入的用户名位于黑名单,则程序异常退出 16 sys.exit("用户%s已经被锁定,请联系管理员解锁." %name) 17 #读取正确的用户名和密码 18 user_file = open("account.txt","r") 19 user_list = user_file.readlines() 20 for user_line in user_list: 21 (user,password) = user_line.strip('\n').split() 22 name_list.append(user_line) #.append():用于在列表末尾添加新的对象 23 print("---------",name_list) 24 #用户名正确,密码输入计数 25 if name == user: 26 i = 0 27 while i<3: 28 passwd = input("请输入密码:") 29 if passwd == password: 30 print("欢迎%s登录"%name) 31 sys.exit(0) 32 else: 33 if i<2: 34 print("用户%s密码错误,请重新输入,还有%d机会."%(name,2-i)) 35 i += 1 36 else: 37 lock_file.write(name + '\n') 38 sys.exit("用户%s输错密码三次,用户将被锁定并退出,请联系管理员解锁."%name) 39 else: 40 pass 41 else: 42 #用户名输入错误计数 43 if count < 2: 44 print("用户%s不存在,请重新输入,还有%d次机会"%(name,2-count)) 45 count += 1 46 else: 47 sys.exit("用户%s不存在,退出"%name) 48 #关闭已经打开的文件 49 lock_file.close() 50 user_file.close()