1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author: Even 4 5 6 count = 0 # 为了记录需求中3次输入错误避免的次数,计数项赋初始值 7 load = True # 为了完成功能后退出,赋初始值 8 file = open("正确用户信息文件",'r',encoding='utf-8') # 打开正确用户信息文档,获取正确的用户名密码 9 file_wrong = open("锁定用户信息文件",'r+',encoding='utf-8') # 打开已锁定的用户信息文档,获取锁定的用户名密码 10 line = eval(file.readline()) # 将正确信息中的字符串转换成字典(原字符串为字典格式) 11 line_wrong = eval(file_wrong.readline()) # 将正确信息中的字符串转换成列表(原字符串为列表格式) 12 13 14 def out(): # 将重复代码定义,功能是帮助跳出while循环并关闭已打开文档 15 global load # 声明全局变量 16 load = False # 赋值load,为了跳出while循环 17 file_wrong.close() # 关闭正确用户信息文档 18 file.close() # 关闭锁定用户信息文档 19 20 while load: # 判断是否已完成功能 21 name = input("请输入用户名:") # 输入用户名 22 password = input("请输入密码:") # 输入密码 23 if name in line and name not in line_wrong: # 判断用户名是否正确,和是否已被锁定 24 while count <= 3: # 判断是否已循环3次 25 if password == line[name]: # 判断用户名是否对应正确的密码 26 print("您已成功登陆") # 输出成功登陆信息 27 out() # 调用自定义out方法 28 break # 跳出本次循环 29 else: # 说明未输入正确的密码 30 count +=1 # 计数项自加一 31 msg_count = '''第%s次密码输入错误 '''%(count) # 提示输入错误次数 32 print(msg_count) # 打印错误次数信息 33 if count < 3: # 小于三次错误输入,可以重新输入 34 password = input("密码错误,请重新输入密码:") # 重新输入密码 35 elif count == 3: # 判断是否已输错三次 36 print("已输错3次,账号已锁定") # 打印锁定提示信息 37 line_wrong.append(name) # 将已锁定信息加入锁定元组中 38 file_wrong.seek(0) # 输入指针移到开头,如果不移动会产生多个元组 39 file_wrong.write(str(line_wrong)) # 写入锁定信息 40 file_wrong.tell() # 获取当前的输入指针位置,如果不获取会产生多个元组 41 out() # 调用out方法 42 break 43 elif name in line_wrong: # 判断用户名是否在已锁定用户名中 44 print("该用户名已被锁定") # 打印已锁定通知信息 45 out() # 调用自定义out方法 46 break # 跳出当前循环 47 else: # 说明用户名不在正确用户名信息中 48 print("该用户名不存在") # 打印用户名输入错误信息 49 out() # 调用out方法
1 file = open("fdfdsf",'r+',encoding='utf-8') # 打开正确用户信息文档,获取正确的用户名密码 2 line = eval(file.readline()) # 将正确信息中的字符串转换成字典(原字符串为字典格式) 3 line.append(name) # 将已锁定信息加入锁定元组中 4 file.seek(0) # 输入指针移到开头,如果不移动会产生多个元组 5 file.write(str(line)) # 写入信息 6 file.tell() # 获取当前的输入指针位置,如果不获取会产生多个元组 7 file.close() # 关闭正确用户信息文档
模拟登陆作业需求:
1. 用户输入帐号密码进行登陆
2. 用户信息保存在文件内
3. 用户密码输入错误三次后锁定用户
额外实现功能:
1.提示输入错误次数
2.输入已锁定用户会提示
3.用户不存在会提示
正确用户信息文件中以字典形式保存用户名密码:
{'name': 'password','cx':'123','even':'456','test':'ok'}
锁定用户信息文件中以列表形式保存锁定用户名:
['name']
第二种方法:
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:kiko0o0 4 5 import os 6 import sys 7 import getpass 8 LOCAL_DIR = os.path.dirname(os.path.abspath(__file__)) 9 USER_DB = "%s/%s" % (LOCAL_DIR, "UserInfo.db") 10 PLANTFORM = sys.platform 11 12 # 初始化用户[当用户文件不存在时生效] 13 if os.path.exists(USER_DB): 14 pass 15 else: 16 UserInfo = "admin 123456 0 user01 123456 0 total 0 0 " 17 18 # 编辑文件的一种方式,优于open,文件句柄当不用时自动关闭 19 with open(USER_DB, "w") as write_file: 20 write_file.write(UserInfo) 21 22 # 将用户信息生成一个字典,方便操作 23 user_info = dict() 24 with open(USER_DB, "r") as read_file: 25 for line in read_file: 26 if len(line) != 0: 27 username, password, times = line.split() 28 if username == "total": 29 user_info[username] = {"times": int(times), "flag": password} # flag无实际意义 30 else: 31 user_info[username] = {"password": password, "times": int(times)} 32 33 34 def up(): 35 global UserInfo 36 UserInfo = "" 37 # 字符串拼接用户信息 38 for info in user_info.keys(): 39 if info == "total": 40 userInfo = "%s %s %s " % (info, 0, user_info["total"]["times"]) 41 else: 42 userInfo = "%s %s %s " % (info, user_info[info]["password"], user_info[info]["times"]) 43 UserInfo = "%s%s" % (UserInfo, userInfo) 44 with open(USER_DB, "w") as write_file: 45 write_file.write(UserInfo) 46 # 主逻辑区 47 while user_info["total"]["times"] < 3: 48 print("IT 技术管理后台") 49 username = input("input your username :>>>").strip() 50 if PLANTFORM == "linux2": 51 password = getpass.getpass("input your password :>>>").strip() 52 elif PLANTFORM == "linux": 53 password = getpass.getpass("input your password :>>>").strip() 54 else: 55 password = input("input your password :>>>").strip() 56 if username in user_info: 57 if user_info[username]["times"] == 3: 58 exit("account is lock, Contact the administrator") 59 elif password == user_info[username]["password"]: 60 print("Good morning %s" % username) 61 user_info[username]["times"] = 0 62 user_info["total"]["times"] = 0 63 up() 64 break 65 else: 66 input("Enter to wrong account password. (Any key to continue)") 67 user_info[username]["times"] += 1 68 user_info["total"]["times"] += 1 69 up() 70 71 else: 72 input("Enter to wrong account password. (Any key to continue)") 73 user_info["total"]["times"] += 1 74 up() 75 76 else: 77 user_info["total"]["times"] = 0 78 up() 79 input("Too many retries, please try again later. (Any key to continue)") 80 exit("88") 81 82 print(''' 83 initializing........ 84