刷题 - Login 连续输入三次锁定
Login 连续输入三次锁定
需求解析:
用户输入用户名密码之后,和文件中数据进行比对,如果用户不存在即跑错,如果用户连续输入3次错误即锁定。
此题运用python字典,python文件处理,while,for语句,以及正则表达式。其中字典需和string相互转换完成存储。
文件为txt,内容如下
user:alice password:123 failcount:2
user:alex password:265 failcount:1
user:eric password:654 failcount:3
流程:
先get 文件信息将string转为dict,username为dict key
用户输入用户名和密码之后和dict中key进行比对
如果不存在则报错退出本次循环,继续循环
如果存在,查看failcount
如果大于等于3,报错返回继续进循环
如果小于三,对比password
如果password正确,提示welcome结束运行
如果password错误,报错返回继续循环
Code:
def getUserInfo(filename): f1 = open(filename, 'r+') f1_context = f1.readlines() global user_info_dict user_info_dict = {} for each_user in f1_context: user_data_tup = re.findall(r'(\w+):(\w+)\s?', each_user) user_data_dict = {} for i in user_data_tup: user_data_dict[i[0]] = i[1] user_info_dict[user_data_dict['user']] = user_data_dict f1.close() def putUserInfo(filename): f1 = open(filename, 'r+') f1.truncate() f1.close() for userInfo in user_info_dict.values(): for key, value in userInfo.items(): f1 = open(filename, 'a') a = '%s:%s ' % (key, value) f1.write(a) f1.close() f1 = open(filename, 'a') f1.write('\r\n') f1.close() def userExist(username): if username in user_info_dict: return True else: print('Invalid username or password!') return False def userLocked(username): if int(user_info_dict[username]['failcount']) >= 3: print('Your account has been locked, please contact admin!') return True else: return False def passwordExpected(username, password): if user_info_dict[username]['password'] == password: print(username + ', welcome!') user_info_dict[username]['failcount'] = '0' return True else: print('Invalid username or password!') return False def onPasswordError(username): fc = int(user_info_dict[username]['failcount']) fc += 1 user_info_dict[username]['failcount'] = str(fc) if fc >= 3: print('Your account has been locked, please contact admin!') if __name__ == '__main__': import re getUserInfo('F1.txt') success = None while not success: username = input('Username:') password = input('Password:') if userExist(username): if not userLocked(username): if passwordExpected(username, password): success = True putUserInfo('F1.txt') else: onPasswordError(username) putUserInfo('F1.txt')