本次练习包含的内容包括,系统登录验证以及三级菜单的使用,实现功能如下:
1.用户输入用户验证是否被锁;
2.验证用户名是否存在;
3.用户输入三次错误则锁定用户;
4.二级菜单和三级菜单的返回和退出
具体代码如下:
1 #!/usr/bin/env python 2 #! -*- coding:utf:8 -*- 3 #password.txt文件中内容如下: 4 #dys dys 5 #abc abc 6 #123 123 7 #user_lock.txt文件中内容如下: 8 #123 9 10 import time 11 12 #用户是否被锁检查模块,通过判断输入的用户名在不在user_lock.txt文件中来返回lock_flag 13 def user_check(user_name): 14 with open("user_lock.txt","r") as f: 15 lock_flag = 0 16 for line in f.readlines(): 17 line = line.strip('\n') #取出换行符 18 if user_name in line: 19 print("user is locked!\n") 20 lock_flag = 1 21 else: 22 lock_flag = 0 23 #print(lock_flag) 24 return lock_flag 25 26 #判断输入的用户密码是否正确 27 def password_check(user_name): 28 with open("password.txt",'r') as f: 29 #print(type(f.read())) 30 for line in f.readlines(): 31 line = line.strip('\n').split(' ') #去除每一行中的换行符并且按照空格分割字符串 32 #print(line) 33 #user_exist_flag = 0 34 #user_name = line[0] 35 #user_password = line[1] 36 if line[0] == user_name: 37 user_exist_flag = 1 #用户名存在则初始化user_exist_flag为1 38 err_count = 0 #初始化输入错误次数,用于下面的循环 39 while err_count < 3: 40 user_password = input("Pls input your password:\n") 41 if line[1] == user_password: 42 print("Login successful!\n") 43 print("Hello %s!!!"%user_name) 44 return user_exist_flag #返回user_exist_flag用于主程序中判断用户是否存在 45 else: 46 print("Password error!Pls try again!\n") 47 err_count +=1 48 else: 49 with open("user_lock.txt",'w+') as f: #超过输入错误的最大次数,用户被锁,并且写入user_lock.txt文件 50 f.write(user_name+'\n') 51 print("You have failed 3 times! You account have been locked!") 52 break 53 else: 54 user_exist_flag = 0 55 return user_exist_flag 56 57 58 #定义系统退出模块,sleep三秒后退出 59 def leave_system(): 60 for i in range(0, 3): 61 print("Leave system! %s seconds later" % (3 - i)) 62 time.sleep(1) 63 64 #定义需要用到的三级字典 65 Maps_dic = {"安徽省":{ 66 "合肥市":{ 67 "肥西县":{231200} 68 }, 69 "六安市":{ 70 "霍邱县":{237400} 71 }}, 72 "江苏省":{ 73 "南京市":{ 74 "江宁区":{210000} 75 }, 76 "苏州市":{ 77 "昆山市":{215300} 78 } 79 } 80 } 81 82 #定义主函数 83 def main(): 84 first_dic ={} 85 second_dic = {} 86 third_dic = {} 87 print(""" 88 ************************************************************************************************ 89 * * 90 * Welcome to the system * 91 * * 92 ************************************************************************************************ 93 """) 94 user_name = input("Pls input your user name:\n") #引导用户输入用户名 95 lock_flag = user_check(user_name) #执行用户是否被锁检查函数,返回lock_flag 96 #user_password = input("Your password is:") 97 if lock_flag == 0: 98 user_exist_flag = password_check(user_name) #如果用户没有被锁,判断用户输入的用户名是否存在 99 if user_exist_flag == 0: 100 print("User doesn't exist!") 101 else: 102 break_flag1 = 0 #设置退出一层循环标志 103 while break_flag1 != 1: #当用户没有输入q则循环 104 print("This is the first level menu:") 105 for index, value in enumerate(Maps_dic, 1): #递归打印第一级菜单信息和序号 106 print(index, value) 107 first_dic[index] = value #存入一级菜单词典 108 choice1 = input("Pls input your choice(input q to exit):") #引导用户输入第一级菜单的选择 109 if choice1.isdigit(): #判断用户输入的是否为数字 110 choice1 = int(choice1) #若用户输入的是数字,则实数化 111 key1 = first_dic[choice1] #打印用户输入对应的一级菜单key值 112 break_flag2 = 0 #设置退出二层循环标志 113 while break_flag2 != 1: 114 print("This is the second level menu:") 115 for index,value in enumerate(Maps_dic[key1],1): #递归打印第二级菜单信息和序号 116 print(index,value) 117 second_dic[index] = value #存入二级菜单词典 118 choice2 = input("Pls input your choice(input q to exit,input b to back):") #引导用户输入第二级菜单的选择 119 if choice2.isdigit(): #判断用户输入的是否为数字 120 choice2 = int(choice2) 121 key2 = second_dic[choice2] #打印用户输入对应的二级菜单key值 122 break_flag3 = 0 #设置退出三层循环标志 123 while break_flag3 != 1: 124 print("This is the third level menu:") 125 for index, value in enumerate(Maps_dic[key1][key2], 1): #递归打印第二级菜单信息和序号 126 print(index, value) 127 #print("----") 128 third_dic[index] = value #存入三级菜单词典 129 choice3 = input("Pls input your choice(input q to exit,input b to back):") 130 if choice3.isdigit(): #判断用户输入的是否为数字 131 choice3 = int(choice3) 132 key3 = third_dic[choice3] #打印用户输入对应的三级菜单key值 133 #print(key3) 134 #while break_flag3 != 1: 135 for value in Maps_dic[key1][key2][key3]: #打印用户所选县级市邮编 136 print("该县级单位邮政编码为:%s" %value) 137 elif choice3 == 'q': #用户三级菜单时选择q则退出系统 138 leave_system() 139 break_flag3 = 1 #设置退出三层循环 140 break_flag2 = 1 141 break_flag1 = 1 142 elif choice3 == 'b': #用户三级菜单时选择b则返回上一级菜单 143 break_flag3 = 1 144 elif choice2 == 'q': #用户二级菜单时选择q则退出系统,需要设置第一二层退出标志为1 145 leave_system() 146 break_flag2 = 1 147 break_flag1 = 1 148 elif choice2 == 'b': #用户二级菜单时选择b则返回上一级菜单 149 break_flag2 = 1 150 elif choice1 == 'q': 151 leave_system() 152 break_flag1 = 1 153 else: #用户被锁,打印提示信息 154 print("Pls contact your admin to release your user!\n") 155 156 if __name__ == '__main__': 157 main()