1、登录接口
实现功能:
1用户注册
2用户登录
3用户名是否存在
4密码错误三次锁定,并更新用户锁定状态
5用户锁定状态匹配
流程图
涉及到1个文件作为库
passwd #用户密码文件,1为锁定状态
zhy:123456:0
alex:234567:0
xiaoming:45678:1
python代码
1
#
!/usr/bin/env python3
2 # coding:utf-8
3
4 user_name = input( " 请输入用户名: ")
5 n = 0
6 line = " "
7 while 1:
8 with open( ' passwd ', ' r ') as passwd_file:
9 for line in passwd_file:
10 passwd_line = line.split( ' : ') # 将每一行都转换成列表 ['用户名','密码','状态']
11 if user_name != passwd_line[0]: # 当用户不匹配时标记为n=0,当用户名匹配成功则标记n=1并结束循环
12 n = 0
13 else:
14 n = 1
15 break
16 if n == 0: # 判断n的值,n=0时则用户不存在,n=1时用户存在结束while循环,继续向下执行
17 print( " 您输入的用户名[%s]不存在! " %user_name)
18 user_name = input( " 请重新输入用户名: ")
19 else:
20 break
21
22 with open( ' passwd ', ' r+ ') as passwd_file: # 以读写的模式打开文件,后面会涉及到写文件
23 for line in passwd_file:
24 passwd_line = line.split( ' : ')
25 if user_name == passwd_line[0] and passwd_line[2].strip( ' \n ') == " 1 ": # 判断当前用户的状态是否锁定,1为锁定,0为未锁定
26 print( " 您的用户名[%s]已经被锁定 " %user_name)
27 break
28 else:
29 count = 1
30 password = input( ' 请输入密码: ')
31 while count < 4: # 当输入次数小于4时,对密码正确性进行匹配,在输入三次错误后count会等于4,执行else语句锁定用户
32 passwd_file.seek(0) # 重新定位用户密码文件开始位置
33 for line in passwd_file:
34 passwd_line = line.split( ' : ')
35 if user_name == passwd_line[0] and passwd_line[1] == password : # 当前用户的密码进行匹配,匹配则显示登录成功 ,不匹配执行else语句
36 print( ' 欢迎您%s登陆成功! ' % user_name)
37 exit()
38 else:
39 print( ' 您输入的密码错误,超过3次您的账户将会被锁定,当前错误次数%s ' % count)
40 if count < 3 : # 最初已经提示过输入一次密码,所以只需再提供最多2次输入
41 password = input( ' 请重新输入密码: ')
42 count += 1 # 计数器+1
43 else:
44 print( ' 您输入密码错误超过三次,该账户%s已锁定! ' %user_name)
45 passwd_file.seek(0) # 重新定位用户密码文件开始位置
46 for line in passwd_file:
47 passwd_line = line.split( ' : ')
48 if user_name == passwd_line[0]:
49 break
50 lock_line = line # 找出需要锁定用户所在的行
51 lock_line_1 = lock_line.replace( ' 0 ', ' 1 ') # 将用户的状态由未锁定置为锁定
52 passwd_file.seek(0)
53 old_line = passwd_file.read() # 读取所有文件内容
54 new_line = old_line.replace(lock_line,lock_line_1) # 更新需要锁定的用户行
55 passwd_file.seek(0)
56 passwd_file.truncate()
57 passwd_file.write(new_line) # 重新写入文件
58 exit()
2 # coding:utf-8
3
4 user_name = input( " 请输入用户名: ")
5 n = 0
6 line = " "
7 while 1:
8 with open( ' passwd ', ' r ') as passwd_file:
9 for line in passwd_file:
10 passwd_line = line.split( ' : ') # 将每一行都转换成列表 ['用户名','密码','状态']
11 if user_name != passwd_line[0]: # 当用户不匹配时标记为n=0,当用户名匹配成功则标记n=1并结束循环
12 n = 0
13 else:
14 n = 1
15 break
16 if n == 0: # 判断n的值,n=0时则用户不存在,n=1时用户存在结束while循环,继续向下执行
17 print( " 您输入的用户名[%s]不存在! " %user_name)
18 user_name = input( " 请重新输入用户名: ")
19 else:
20 break
21
22 with open( ' passwd ', ' r+ ') as passwd_file: # 以读写的模式打开文件,后面会涉及到写文件
23 for line in passwd_file:
24 passwd_line = line.split( ' : ')
25 if user_name == passwd_line[0] and passwd_line[2].strip( ' \n ') == " 1 ": # 判断当前用户的状态是否锁定,1为锁定,0为未锁定
26 print( " 您的用户名[%s]已经被锁定 " %user_name)
27 break
28 else:
29 count = 1
30 password = input( ' 请输入密码: ')
31 while count < 4: # 当输入次数小于4时,对密码正确性进行匹配,在输入三次错误后count会等于4,执行else语句锁定用户
32 passwd_file.seek(0) # 重新定位用户密码文件开始位置
33 for line in passwd_file:
34 passwd_line = line.split( ' : ')
35 if user_name == passwd_line[0] and passwd_line[1] == password : # 当前用户的密码进行匹配,匹配则显示登录成功 ,不匹配执行else语句
36 print( ' 欢迎您%s登陆成功! ' % user_name)
37 exit()
38 else:
39 print( ' 您输入的密码错误,超过3次您的账户将会被锁定,当前错误次数%s ' % count)
40 if count < 3 : # 最初已经提示过输入一次密码,所以只需再提供最多2次输入
41 password = input( ' 请重新输入密码: ')
42 count += 1 # 计数器+1
43 else:
44 print( ' 您输入密码错误超过三次,该账户%s已锁定! ' %user_name)
45 passwd_file.seek(0) # 重新定位用户密码文件开始位置
46 for line in passwd_file:
47 passwd_line = line.split( ' : ')
48 if user_name == passwd_line[0]:
49 break
50 lock_line = line # 找出需要锁定用户所在的行
51 lock_line_1 = lock_line.replace( ' 0 ', ' 1 ') # 将用户的状态由未锁定置为锁定
52 passwd_file.seek(0)
53 old_line = passwd_file.read() # 读取所有文件内容
54 new_line = old_line.replace(lock_line,lock_line_1) # 更新需要锁定的用户行
55 passwd_file.seek(0)
56 passwd_file.truncate()
57 passwd_file.write(new_line) # 重新写入文件
58 exit()
2、多级菜单
实现功能
1进入省
2进入地级市
3进入区县
流程图
python代码
1
#
!/usr/bin/env python3
2 # coding:utf-8
3
4 p_list = [ ' 北京 ', ' 上海 ', ' 河北 ']
5 c_beijing = [ ' 海淀区 ', ' 昌平区 ', ' 朝阳区 ']
6 c_shanghai = [ ' 徐汇区 ', ' 虹口区 ', ' 长宁区 ']
7 c_hebei = [ ' 廊坊 ', ' 石家庄 ', ' 保定 ']
8
9 area_haidian = [ ' 中关村 ', ' 西二旗 ', ' 上地 ']
10 area_changping = [ ' 回龙观 ', ' 天通苑 ', ' 沙河 ']
11 area_chaoyang = [ ' 国贸 ', ' 十里堡 ', ' 望京 ']
12
13 area_xuhui = [ ' 天平路 ', ' 湖南路 ', ' 枫林路 ']
14 area_hongkou = [ ' 新港路 ', ' 嘉兴路 ', ' 广中路 ']
15 area_changning = [ ' 华阳路 ', ' 江苏路 ', ' 新华路 ']
16
17 area_langfang = [ ' 香河 ', ' 大厂 ', ' 三河 ']
18 area_shijiazhuang = [ ' 桥东区 ', ' 桥西区 ', ' 行唐 ']
19 area_baoding = [ ' 徐水区 ', ' 涿州 ', ' 定州 ']
20
21
22
23 # 根据用户选择显示指定省下的城市
24 def print_city_by_id(n,province_name):
25 if p_list_num == n:
26 print_area_list = '''
27 1---%s
28 2---%s
29 3---%s
30 ''' %(province_name[0], province_name[1], province_name[2])
31 print(print_area_list)
32
33
34 # 根据用户选择显示指定市下的区县
35 def print_area_by_id(i,city_name):
36 if c_list_num == i:
37 print_area_list = '''
38 1---%s
39 2---%s
40 3---%s
41 ''' %(city_name[0], city_name[1], city_name[2])
42 print(print_area_list)
43
44 while True:
45 print( " 当前所在位置为中国,下列为省份列表 ")
46 print_p_list= ''' #省份列表打印格式
47 1-%s
48 2-%s
49 3-%s
50 '''%(p_list[0],p_list[1],p_list[2])
51 print(print_p_list)
52 p_list_num = input( " 请输入序号进入对应省份,退出输入q: ")
53 while p_list_num in ( " 1 ", " 2 ", " 3 "):
54 if p_list_num == " 1 ": # 当1时为北京市
55 print( " 当前所在位置为中国%s,下列为城市列表 " % p_list[int(p_list_num) - 1]) # 显示当前位置
56 print_city_by_id(p_list_num,c_beijing) # 显示城市列表
57 c_list_num = input( " 请输入序号进入对应城市,返回输入b,退出输入q: ")
58 while c_list_num in ( " 1 ", " 2 ", " 3 "):
59
60 if c_list_num == " 1 ": # 1为海淀区
61 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_beijing[int(c_list_num) - 1])) # 显示当前位置
62 print_area_by_id(c_list_num,area_haidian) # 显示县级列表
63 area_list_num = input( " 返回输入b,退出输入q: ")
64 if area_list_num == " b ":
65 break
66 elif area_list_num == " q ":
67 exit()
68 else:
69 print( " 输入错误!请重新输入! ")
70 continue
71 elif c_list_num == " 2 ": # 2为昌平区
72 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1],c_beijing[int(c_list_num) - 1])) # 显示当前位置
73 print_area_by_id(c_list_num,area_changping)
74 area_list_num = input( " 返回输入b,退出输入q: ")
75 if area_list_num == " b ":
76 break
77 elif area_list_num == " q ":
78 exit()
79 else:
80 print( " 输入错误!请重新输入! ")
81 continue
82 elif c_list_num == " 3 ": # 3为朝阳区
83 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1],c_beijing[int(c_list_num) - 1])) # 显示当前位置
84 print_area_by_id(c_list_num,area_chaoyang)
85 area_list_num = input( " 返回输入b,退出输入q: ")
86 if area_list_num == " b ": # 返回上一级
87 break
88 elif area_list_num == " q ": # 退出程序
89 exit()
90 else: # 其他输入错误提示
91 print( " 输入错误!请重新输入! ")
92 continue
93 else:
94 if c_list_num == " b ":
95 break
96 elif c_list_num == " q ":
97 exit()
98 else:
99 print( " 输入错误!请重新输入! ")
100 continue
101 if p_list_num == " 2 ": # 2为上海
102 print( " 当前所在位置为中国%s,下列为城市列表 " % p_list[int(p_list_num) - 1])
103 print_city_by_id(p_list_num,c_shanghai)
104 c_list_num = input( " 请输入序号进入对应城市,返回输入b,退出输入q: ")
105 while c_list_num in ( " 1 ", " 2 ", " 3 "):
106
107 if c_list_num == " 1 ": # 1为徐汇区
108 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_shanghai[int(c_list_num) - 1])) # 显示当前位置
109 print_area_by_id(c_list_num, area_xuhui)
110 area_list_num = input( " 返回输入b,退出输入q: ")
111 if area_list_num == " b ":
112 break
113 elif area_list_num == " q ":
114 exit()
115 else:
116 print( " 输入错误!请重新输入! ")
117 continue
118 elif c_list_num == " 2 ":
119 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_shanghai[int(c_list_num) - 1])) # 显示当前位置
120 print_area_by_id(c_list_num, area_hongkou)
121 area_list_num = input( " 返回输入b,退出输入q: ")
122 if area_list_num == " b ":
123 break
124 elif area_list_num == " q ":
125 exit()
126 else:
127 print( " 输入错误!请重新输入! ")
128 continue
129 elif c_list_num == " 3 ":
130 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_shanghai[int(c_list_num) - 1])) # 显示当前位置
131 print_area_by_id(c_list_num, area_changning)
132 area_list_num = input( " 返回输入b,退出输入q: ")
133 if area_list_num == " b ":
134 break
135 elif area_list_num == " q ":
136 exit()
137 else:
138 print( " 输入错误!请重新输入! ")
139 continue
140 else:
141 if c_list_num == " b ":
142 break
143 elif c_list_num == " q ":
144 exit()
145 else:
146 print( " 输入错误!请重新输入! ")
147 continue
148 if p_list_num == " 3 ":
149 print( " 当前所在位置为中国%s,下列为城市列表 " % p_list[int(p_list_num) - 1]) # 显示当前位置
150 print_city_by_id(p_list_num, c_hebei)
151 c_list_num = input( " 请输入序号进入对应城市,返回输入b,退出输入q: ")
152 while c_list_num in ( " 1 ", " 2 ", " 3 "):
153
154 if c_list_num == " 1 ":
155 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_hebei[int(c_list_num) - 1])) # 显示当前位置
156 print_area_by_id(c_list_num, area_langfang)
157 area_list_num = input( " 返回输入b,退出输入q: ")
158 if area_list_num == " b ":
159 break
160 elif area_list_num == " q ":
161 exit()
162 else:
163 print( " 输入错误!请重新输入! ")
164 continue
165 elif c_list_num == " 2 ":
166 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_hebei[int(c_list_num) - 1])) # 显示当前位置
167 print_area_by_id(c_list_num, area_shijiazhuang)
168 area_list_num = input( " 返回输入b,退出输入q: ")
169 if area_list_num == " b ":
170 break
171 elif area_list_num == " q ":
172 exit()
173 else:
174 print( " 输入错误!请重新输入! ")
175 continue
176 elif c_list_num == " 3 ":
177 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_hebei[int(c_list_num) - 1])) # 显示当前位置
178 print_area_by_id(c_list_num, area_baoding)
179 area_list_num = input( " 返回输入b,退出输入q: ")
180 if area_list_num == " b ":
181 break
182 elif area_list_num == " q ":
183 exit()
184 else:
185 print( " 输入错误!请重新输入! ")
186 continue
187 else:
188 if c_list_num == " b ":
189 break
190 elif c_list_num == " q ":
191 exit()
192 else:
193 print( " 输入错误!请重新输入! ")
194 continue
195 else:
196 if p_list_num == " q ":
197 break
198 else:
199 print( " 输入错误!请重新输入! ")
200 continue
2 # coding:utf-8
3
4 p_list = [ ' 北京 ', ' 上海 ', ' 河北 ']
5 c_beijing = [ ' 海淀区 ', ' 昌平区 ', ' 朝阳区 ']
6 c_shanghai = [ ' 徐汇区 ', ' 虹口区 ', ' 长宁区 ']
7 c_hebei = [ ' 廊坊 ', ' 石家庄 ', ' 保定 ']
8
9 area_haidian = [ ' 中关村 ', ' 西二旗 ', ' 上地 ']
10 area_changping = [ ' 回龙观 ', ' 天通苑 ', ' 沙河 ']
11 area_chaoyang = [ ' 国贸 ', ' 十里堡 ', ' 望京 ']
12
13 area_xuhui = [ ' 天平路 ', ' 湖南路 ', ' 枫林路 ']
14 area_hongkou = [ ' 新港路 ', ' 嘉兴路 ', ' 广中路 ']
15 area_changning = [ ' 华阳路 ', ' 江苏路 ', ' 新华路 ']
16
17 area_langfang = [ ' 香河 ', ' 大厂 ', ' 三河 ']
18 area_shijiazhuang = [ ' 桥东区 ', ' 桥西区 ', ' 行唐 ']
19 area_baoding = [ ' 徐水区 ', ' 涿州 ', ' 定州 ']
20
21
22
23 # 根据用户选择显示指定省下的城市
24 def print_city_by_id(n,province_name):
25 if p_list_num == n:
26 print_area_list = '''
27 1---%s
28 2---%s
29 3---%s
30 ''' %(province_name[0], province_name[1], province_name[2])
31 print(print_area_list)
32
33
34 # 根据用户选择显示指定市下的区县
35 def print_area_by_id(i,city_name):
36 if c_list_num == i:
37 print_area_list = '''
38 1---%s
39 2---%s
40 3---%s
41 ''' %(city_name[0], city_name[1], city_name[2])
42 print(print_area_list)
43
44 while True:
45 print( " 当前所在位置为中国,下列为省份列表 ")
46 print_p_list= ''' #省份列表打印格式
47 1-%s
48 2-%s
49 3-%s
50 '''%(p_list[0],p_list[1],p_list[2])
51 print(print_p_list)
52 p_list_num = input( " 请输入序号进入对应省份,退出输入q: ")
53 while p_list_num in ( " 1 ", " 2 ", " 3 "):
54 if p_list_num == " 1 ": # 当1时为北京市
55 print( " 当前所在位置为中国%s,下列为城市列表 " % p_list[int(p_list_num) - 1]) # 显示当前位置
56 print_city_by_id(p_list_num,c_beijing) # 显示城市列表
57 c_list_num = input( " 请输入序号进入对应城市,返回输入b,退出输入q: ")
58 while c_list_num in ( " 1 ", " 2 ", " 3 "):
59
60 if c_list_num == " 1 ": # 1为海淀区
61 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_beijing[int(c_list_num) - 1])) # 显示当前位置
62 print_area_by_id(c_list_num,area_haidian) # 显示县级列表
63 area_list_num = input( " 返回输入b,退出输入q: ")
64 if area_list_num == " b ":
65 break
66 elif area_list_num == " q ":
67 exit()
68 else:
69 print( " 输入错误!请重新输入! ")
70 continue
71 elif c_list_num == " 2 ": # 2为昌平区
72 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1],c_beijing[int(c_list_num) - 1])) # 显示当前位置
73 print_area_by_id(c_list_num,area_changping)
74 area_list_num = input( " 返回输入b,退出输入q: ")
75 if area_list_num == " b ":
76 break
77 elif area_list_num == " q ":
78 exit()
79 else:
80 print( " 输入错误!请重新输入! ")
81 continue
82 elif c_list_num == " 3 ": # 3为朝阳区
83 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1],c_beijing[int(c_list_num) - 1])) # 显示当前位置
84 print_area_by_id(c_list_num,area_chaoyang)
85 area_list_num = input( " 返回输入b,退出输入q: ")
86 if area_list_num == " b ": # 返回上一级
87 break
88 elif area_list_num == " q ": # 退出程序
89 exit()
90 else: # 其他输入错误提示
91 print( " 输入错误!请重新输入! ")
92 continue
93 else:
94 if c_list_num == " b ":
95 break
96 elif c_list_num == " q ":
97 exit()
98 else:
99 print( " 输入错误!请重新输入! ")
100 continue
101 if p_list_num == " 2 ": # 2为上海
102 print( " 当前所在位置为中国%s,下列为城市列表 " % p_list[int(p_list_num) - 1])
103 print_city_by_id(p_list_num,c_shanghai)
104 c_list_num = input( " 请输入序号进入对应城市,返回输入b,退出输入q: ")
105 while c_list_num in ( " 1 ", " 2 ", " 3 "):
106
107 if c_list_num == " 1 ": # 1为徐汇区
108 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_shanghai[int(c_list_num) - 1])) # 显示当前位置
109 print_area_by_id(c_list_num, area_xuhui)
110 area_list_num = input( " 返回输入b,退出输入q: ")
111 if area_list_num == " b ":
112 break
113 elif area_list_num == " q ":
114 exit()
115 else:
116 print( " 输入错误!请重新输入! ")
117 continue
118 elif c_list_num == " 2 ":
119 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_shanghai[int(c_list_num) - 1])) # 显示当前位置
120 print_area_by_id(c_list_num, area_hongkou)
121 area_list_num = input( " 返回输入b,退出输入q: ")
122 if area_list_num == " b ":
123 break
124 elif area_list_num == " q ":
125 exit()
126 else:
127 print( " 输入错误!请重新输入! ")
128 continue
129 elif c_list_num == " 3 ":
130 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_shanghai[int(c_list_num) - 1])) # 显示当前位置
131 print_area_by_id(c_list_num, area_changning)
132 area_list_num = input( " 返回输入b,退出输入q: ")
133 if area_list_num == " b ":
134 break
135 elif area_list_num == " q ":
136 exit()
137 else:
138 print( " 输入错误!请重新输入! ")
139 continue
140 else:
141 if c_list_num == " b ":
142 break
143 elif c_list_num == " q ":
144 exit()
145 else:
146 print( " 输入错误!请重新输入! ")
147 continue
148 if p_list_num == " 3 ":
149 print( " 当前所在位置为中国%s,下列为城市列表 " % p_list[int(p_list_num) - 1]) # 显示当前位置
150 print_city_by_id(p_list_num, c_hebei)
151 c_list_num = input( " 请输入序号进入对应城市,返回输入b,退出输入q: ")
152 while c_list_num in ( " 1 ", " 2 ", " 3 "):
153
154 if c_list_num == " 1 ":
155 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_hebei[int(c_list_num) - 1])) # 显示当前位置
156 print_area_by_id(c_list_num, area_langfang)
157 area_list_num = input( " 返回输入b,退出输入q: ")
158 if area_list_num == " b ":
159 break
160 elif area_list_num == " q ":
161 exit()
162 else:
163 print( " 输入错误!请重新输入! ")
164 continue
165 elif c_list_num == " 2 ":
166 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_hebei[int(c_list_num) - 1])) # 显示当前位置
167 print_area_by_id(c_list_num, area_shijiazhuang)
168 area_list_num = input( " 返回输入b,退出输入q: ")
169 if area_list_num == " b ":
170 break
171 elif area_list_num == " q ":
172 exit()
173 else:
174 print( " 输入错误!请重新输入! ")
175 continue
176 elif c_list_num == " 3 ":
177 print( " 当前所在位置为中国%s/%s,下列为区县列表 " % (p_list[int(p_list_num) - 1], c_hebei[int(c_list_num) - 1])) # 显示当前位置
178 print_area_by_id(c_list_num, area_baoding)
179 area_list_num = input( " 返回输入b,退出输入q: ")
180 if area_list_num == " b ":
181 break
182 elif area_list_num == " q ":
183 exit()
184 else:
185 print( " 输入错误!请重新输入! ")
186 continue
187 else:
188 if c_list_num == " b ":
189 break
190 elif c_list_num == " q ":
191 exit()
192 else:
193 print( " 输入错误!请重新输入! ")
194 continue
195 else:
196 if p_list_num == " q ":
197 break
198 else:
199 print( " 输入错误!请重新输入! ")
200 continue