需求:
基础需求:
- 让用户输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后退出程序
升级需求:
- 可以支持多个用户登录 (提示,通过列表存多个账户信息)
- 用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
代码:
1.基础需求实现
简单需求实现起来没有什么太大的难度,主要是合理使用循环退出条件
1 # 基础需求: 2 _user = "wyb" 3 _pwd = "666" 4 5 count = 0 6 while count < 3: 7 # 让用户输入用户名密码 8 user = input("username: ") 9 pwd = input("password: ") 10 # 认证成功后显示欢迎信息 11 if user == _user and pwd == _pwd: 12 print("Welcome, %s!" % user) 13 break 14 # 输入错误重新输入 15 else: 16 print("用户名或密码错误!请重新输入!") 17 count += 1 18 else: 19 print("你已经尝试了3次!不能再试了!")
2.升级需求实现
升级需求相比简单需求在难度上大大提升了,在使用列表的同时也要注意用户名和密码如何对应,并且需求还涉及到了文件读取写入内容
我的解决方案: 把锁定用户和查找用户是否已经锁定写成函数以简化程序内部的逻辑,使用时直接调用,程序的流程图:
1 users = ["wyb", "zl", "xxx", "abc"] 2 pwds = ["123456", "666", "xyzmnopq", "rst@1z"] 3 4 5 # 锁定用户 6 def lock_user(user): 7 with open("lock_user.txt", "a+") as f: 8 user = user + " " 9 f.write(user) 10 11 12 # 查找用户是否锁定 13 def find_lock(user): 14 with open("lock_user.txt", "r") as f: 15 for line in f: 16 if user == line.strip(' '): 17 return True 18 return False 19 20 21 while True: 22 # 让用户输入用户名 23 username = input("username: ") 24 25 # 判断用户名是否合法并求用户索引 26 if username in users: 27 user_index = users.index(username) 28 else: 29 print("请使用正确的用户名登陆!") 30 continue 31 32 # 判断用户是否已锁定 33 if find_lock(username): 34 print("你的账号已被锁定,现在不能登录,请使用其他用户登录") 35 continue 36 37 # 用户名对应的密码 38 _pwd = pwds[user_index] 39 # 一个用户输入密码的次数最多为3次 40 for i in range(3): 41 # 用户输入密码 42 pwd = input("password: ") 43 if pwd == _pwd: 44 print("Welcome, %s!" % username) 45 exit() 46 else: 47 if i != 2: 48 print("the password is wrong! please try again!") 49 else: 50 print("连续3次认证失败,已锁定账号!") 51 lock_user(username) 52 break
3.最后版本
下面代码的流程和上面一个代码的流程是一样的,但是使用到了字典来存储用户名和密码,使得操作的时候更加的方便,并且一开始用户名和密码是存储在文件中,通过读取文件然后循环文件将文件中的内容写入字典中
1 # __author__ = "wyb" 2 # date: 2018/4/13 3 4 # 打开文件将文件中的用户名和密码存入字典中 5 use_pwd = {} 6 with open("account.txt", "r") as f: 7 for line in f: 8 u, p = line.split(',') 9 use_pwd[u] = p.strip() 10 11 12 # 锁定用户 13 def lock_user(user): 14 with open("lock_user.txt", "a+") as f: 15 user = user + " " 16 f.write(user) 17 18 19 # 查找用户是否锁定 20 def find_lock(user): 21 with open("lock_user.txt", "r") as f: 22 for l in f: 23 if user == l.strip(' '): 24 return True 25 return False 26 27 28 while True: 29 # 让用户输入用户名 30 username = input("username: ").strip() 31 32 # 判断用户是否在字典中 33 if username in use_pwd.keys(): 34 # 判断用户是否已被锁定 35 if find_lock(username): 36 print("用户已锁定,请选择其他用户登录") 37 continue 38 else: 39 for i in range(3): 40 password = input("password: ").strip() 41 # 密码正确 42 if password == use_pwd[username]: 43 print("welcome %s" % username) 44 exit() 45 # 密码错误 46 else: 47 print("Password is wrong! Enter again!") 48 continue 49 # 输出3次锁定账号 50 print("你已经输出密码3次,将锁定账号!") 51 lock_user(username) 52 break 53 # 输入用户名错误 54 else: 55 print("用户名不正确,请重新输入") 56 continue