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次密码输入错误\n‘‘‘%(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. 用户输入帐号密码进行登陆
2. 用户信息保存在文件内
3. 用户密码输入错误三次后锁定用户
额外实现功能:
1.提示输入错误次数
2.输入已锁定用户会提示
3.用户不存在会提示
正确用户信息文件中以字典形式保存用户名密码:
{‘name‘: ‘password‘,‘cx‘:‘123‘,‘even‘:‘456‘,‘test‘:‘ok‘}
锁定用户信息文件中以列表形式保存锁定用户名:
[‘name‘]
1. 运行程序输出第一级菜单
2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单
3. 菜单数据保存在文件中
4. 让用户选择是否要退出
5. 有返回上一级菜单的功能
{
‘上海‘:{
"徐汇区":{
"漕河泾":["zk","test"],
"桂林路":["syf","test"]
},
"松江区":{
"九亭":["zz","mm"],
"泗泾":{"sss","ddd"},
"佘山":{"Aaat","aaa"},
},
"浦东区":{},
},
‘陕西‘:{
"西安":{},
"咸鱼":{},
"兴平":{}
},
‘北京‘:{
"1环":{},
"2环":{},
"3环":{},
},
}
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:kiko0o0 4 5 6 import sys 7 8 file = open("菜单列表",‘r‘,encoding=‘utf-8‘) # 打开菜单 9 f = file.read() 10 for line in f: # 读取文件中每行信息 11 file_str = str(f) # 将每行信息转成字符串格式 12 data = eval(file_str) # 字符串转成字典格式 13 14 15 def list(): # 定义读取字典中的key 16 for i in data: 17 print(i) 18 19 20 def choose1(choice1): # 定义第一层选择 21 while choice1 != ‘q‘: # 输入为q即退出程序 22 global one 23 one = choice1 # 定义全局变量one 使得其他函数可以调用 24 if choice1 in data: 25 for i2 in data[one]: 26 print("\t", i2) # 展示3级菜单中所选第一层下的第二层信息 27 choose2(input("请输入第二层:")) # 调用choose2函数,输入第二层信息 28 break 29 elif choice1 == ‘b‘: # 输入b退出循环 30 break 31 else: 32 error = input("输入错误,请重新输入第一层:") # 输入内容不在第一层选项中 33 if error == ‘q‘: # 输入q退出程序 34 sys.exit() 35 else: # 否则调用本函数 36 choose1(error) 37 else: 38 sys.exit() 39 40 41 def choose2(choice2): # 定义第二层选择 42 while choice2 != ‘q‘: 43 global two 44 two = choice2 # 定义全局变量two 使得其他函数可以调用 45 if choice2 in data[one]: 46 for i3 in data[one][two]: 47 print("\t\t", i3) # 展示3级菜单中所选第二层下的第三层信息 48 choose3(input("请输入第三层:")) # 调用choose3函数,输入第三层信息 49 break 50 elif choice2 == ‘b‘: # 输入b退回第一层 51 list() # 调用list函数展示第一层信息 52 choose1(input("请输入第一层:")) 53 break 54 else: 55 error2 = input("输入错误,请重新输入第二层:") # 输入错误,重新输入 56 if error2 == ‘q‘: # 输入q退出程序 57 sys.exit() 58 else: 59 choose2(error2) # 调用本函数 60 else: 61 sys.exit() 62 63 64 def choose3(choice3): # 定义第三层选择 65 while choice3 != ‘q‘: 66 global three 67 three = choice3 # 定义全局变量three 使得其他函数可以调用 68 if choice3 in data[one][two]: 69 for i4 in data[one][two][three]: 70 print("\t\t\t", i4) # 展示3级菜单中所选第三层下的第四层信息 71 choose4(input("最后一层,退回上一层请按‘b’,退出请按‘q")) # 调用choose4函数,提示退出或退回 72 break 73 elif choice3 == ‘b‘: # 输入为b退出 74 choose1(one) 75 break 76 else: 77 error3 = input("输入错误,请重新输入第三层:") # 输入错误,可以重新输入,q退出 78 if error3 == ‘q‘: 79 sys.exit() 80 else: 81 choose3(error3) # 调用本函数 82 else: 83 sys.exit() 84 85 86 def choose4(choice4): # 定义最后退出 87 while choice4 != ‘q‘: # 输入q退出 88 if choice4 == ‘b‘: # 输入b退回上一层 89 choose2(two) 90 else: 91 choose4(input("真的是最后一层了,退回上一层请按‘b’,退出请按‘q‘")) # 声明结束 92 else: 93 sys.exit() 94 95 96 print("退出请按‘q‘,返回上级菜单请按‘b‘") # 声明功能 97 list() # 调用list函数展示第一层信息 98 choose1(input("请输入第一层:")) # 主程序,开始运行