readme
(1)作业名称:编写认证登录
(2)作者:wenjie
(3)作业需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
(4)测试:
环境:pycharm + win10
1、输入lockfile锁定文件中的laowang,结果:提示用户已锁定
2、使用userfile中正确的用户名密码-->故意输错三次(锁定)-->
重新输入正确的用户名密码(提示用户登录,打印当前用户列表
并是否继续使用其他用户登录)-->输入已登录用户(提示已登录,
退出)-->输入新的用户(正确输入,打印用户列表)。。。
流程图
代码:
#!/usr/bin/env python
#coding=utf-8
import sys,getpass
i= 0
userfile_list = [] #定义一个空列表,用来存放(用户名+密码)
users_list = [] #定义一个空列表,用来存放已登录的用户
while i < 3:
# 获取用户名
print('='*20)
username = input("请输入用户名:").strip()
# 判断用户是否被锁定
with open('lockfile','r') as lock_f: #打开lock文件,并赋予可读写权限
lock_list = lock_f.readlines() #readlines()逐行读取全部内容
for lock_name in lock_list: #遍历lock_list,如果用户名在,则提示锁定
lock_name = lock_name.strip('\n') #去除每行内容的换行符
if lock_name == username:
print("用户已经锁定,无法登录!")
sys.exit(1)
# 判断用户是否已登录
if username in users_list:
print("用户%s已登录,请勿重复!"%username)
sys.exit(1)
# 获取密码
print('='*20)
password = getpass.getpass("请输入密码:").strip()
with open('userfile','r') as user_f: #打开userfile,赋予读权限
user_list = user_f.readlines()
for user_line in user_list:
(user,passwd) = user_line.strip('\n').split()
userfile_list.append(user+passwd) #将每个用户密码存入userfile_list
user_input = username + password
#判断用户名密码
if user_input in userfile_list: #比较用户输入的用户名密码是否在userfile_list内
print("==========欢迎%s登录!=========="%username)
users_list.append(username)
print("当前登录的用户有:")
for temp,j in enumerate(users_list,1):#打印当前登录的用户
print("%s. %s"%(temp,j))
choice = input("是否继续使用其他用户登录?(继续输入:‘Y’or‘y’;输入其他退出):")
if choice == 'y' or choice == 'Y':
i = 0 #如果选择y或者Y,重置i为0,并结束本次循环
continue
else:
sys.exit(0)
else:
print("用户名或者密码错误请重新输入,您还有%d次输入机会"%(2-i))
i += 1
else:
with open('lockfile','a') as lock_f: #打开lockfile赋予追加权限
lock_f.write(username+'\n')
sys.exit("您已输错三次,最后一次输入的用户已锁定")