简介:1.在本地创建两个文件,一个文件的内容是存储用户名和密码,另一个的内容是存储锁定的用户
2.登录次数限制为三次,当密码错误三次后,该账号锁定,无法再次登录
#coding=utf-8
user_info_list = []
#打开两个文件
with open('userinfo','rb') as userinfo_file,\
open('locketuser','rb') as locketuser_file:
all_userinfo_file = userinfo_file.read() #获取文件中的内容
all_userinfo_file_list = all_userinfo_file.splitlines() #把文件中的内容按行分割,放入列表中
for user_info_str in all_userinfo_file_list: #获取列表中的每个元素
user_info_tuple = tuple(user_info_str.split()) #把每个元素保存为一个数组
user_info_list.append(user_info_tuple) #把每个数组添加到一个列表中
user_info_dict = dict(user_info_list) #把列表转为一个字典
all_locketuser_file = locketuser_file.read()
user_locket_info_list = all_locketuser_file.splitlines()
with open('locketuser','ab') as locketuser_file:
while True:
user_login_flag = False #定义一个是否登录状态的,初始值未false
username_input=raw_input('请输入用户名:')
if username_input in user_locket_info_list: #先判断是否在黑名单中
print ("您已被加入黑名单,请重新输入。。。")
elif username_input in user_info_dict: #判断用户名是否在字典中
count = 3
while True:
pass_word = raw_input("请输入密码:")
if pass_word == user_info_dict.get(username_input): #通过字典,直接判断用户名和密码是否匹配
user_login_flag = True
print ("{0}登录成功,欢迎。。".format(username_input))
break #登录成功,跳出内层while循环
else:
count -= 1 #用户名和密码未匹配成功,可尝试登录次数-1
if count == 0: #可尝试登录次数为0,则退出
locketuser_file.write(username_input)
exit("{0}已被锁定".format(username_input))
print ("{0}密码错误,还剩{1}次机会。。".format(username_input,count)) #可尝试登录次数不为0,可继续尝试登录,给出剩余次数提示
if user_login_flag: #如果登录成功,则跳出外层while循环
break
else:
print ("\033[31m{0}\033[0m,此用户名不存在,请重新输入".format(username_input))