#Author:huaiq user_dict ={}#初始化一个空字典 user_list =[]#初始化一个空列表,程序可以向里面加入元素login_error_count=0 #用于计数非表内用户名错误次数 #使用while无限循环输入 while True: username = input("username:") #输入用户名 passwd = input("password:") #输入密码 users_data = open(r'D:\360Downloads\userpasswd.txt', 'r') # 登陆用户读取数据文件 userpasswd.txt #循环遍历打开的数据 for user_data in users_data: #使用strip除去user_data中的空格并存入user_list user_list = user_data.strip() #使用split以逗号的形式隔开并重新存入user_datas user_datas = user_list.split(',') #将user_datas第一个位置的值(用户名)存入user_name user_name = user_datas[0].strip() #将user_datas第二个位置的值(密码)存入user_passwd user_passwd = user_datas[1].strip() #将user_datas第三个位置的值(锁定情况)存入user_locked user_locked = user_datas[2].strip() #将user_datas第四个位置的值(错误次数)存入user_error_count,并将类型转化为强整型 user_error_count = int(user_datas[3].strip()) #将前面定义好的变量信息存入字典dict对应的键名中,键名可以随便取 user_dict[user_name]= {'name': user_name, 'passwd': user_passwd, 'locked': user_locked, 'errcount': user_error_count} #关闭打开的userpasswd.txt文件 users_data.close() #匹配输入的用户名是否在字典中已有用户配对 #keys()函数以列表返回一个字典所有的键。 if username in user_dict.keys(): #如果该用户‘locked’键名处值为1则输出锁定 if user_dict[username]['locked'] == '1': print("该用户已被锁定!") break #如果用户名跟密码和字典中的匹配则成功登陆 if username==user_dict[username]['name'] and passwd == user_dict[username]['passwd']: print("欢迎用户【{name}】的登陆!".format(name=username)) break else: #反之则该用户的错误次数+1 user_dict[username]['errcount'] += 1 #三次错误输入后锁定 if user_dict[username]['errcount'] <3: print("您的密码错误,您还有{times}次机会输入".format(times=3-user_dict[username]['errcount'])) #打开userpasswd.txt存入至write_data,追加错误到该文件中 write_data = open(r'D:\360Downloads\userpasswd.txt','w+') #values()用于返回给定字典中可用的所有值的列表存入user_value中 for user_value in user_dict.values(): #将user_value中遍历的值保存到列表中并在之后一个数据行换行 user_list = [user_value['name'],user_value['passwd'],str(user_value['locked']),str(user_value['errcount'])] #将user_list数据行中的值以逗号的形式格式化,并且换行 users_list = ','.join(user_list) write_data.write(users_list + '\n') #关闭打开的userpasswd.txt write_data.close() else: print("您尝试的次数超过三次,该用户【{name}】将被锁定!".format(name=username)) #锁定该用户 user_dict[username]['locked'] = '1' #因为该用户已被锁定所以错误次数可清零了 user_dict[username]['errcount'] = '0' #再次打开追加到该文件中 write_data = open(r'D:\360Downloads\userpasswd.txt','w+') #同上 for user_value in user_dict.values(): user_list = [user_value['name'],user_value['passwd'], str(user_value['locked']),str(user_value['errcount'])] users_list = ','.join(user_list) write_data.write(users_list + '\n') write_data.close() break else: print('该用户名不存在!你可以尝试三次!你还可以尝试{times}次!'.format(times=2-login_error_count)) login_error_count+=1 if login_error_count > 2: break
途中遇到很多错误,花了一条参考了一些改好了
1.文件名更改是自己加了后缀导致自己绝对路径都找不到该文件,哈哈
2.文件转义符号直接在前面加个r就行了
3.字典中的[user_name]搞成了输入时的username导致直接退到最后。。。