自动化运维第一天练习

时间:2022-09-13 21:50:29

本次练习包含的内容包括,系统登录验证以及三级菜单的使用,实现功能如下:

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()