1 #!/usr/bin/env python
2 # coding:utf-8
3
4 """
5 aim: 基于文件存储的用户登录程序(3次登录失败,锁定用户)
6
7 need:
8 a. 用户信息文件
9 b. 用户输入
10
11 logical:
12 a. 校验用户名合法情况
13 b. 校验用户锁定情况
14 c. 校验密码
15 d. 更新登录失败次数
16 e. 写入文件
17
18 sum:
19 a. 更新用户锁定次数不要直接操作文件,可先写入内存,程序退出之前写入文件
20 b. 逻辑判断情况
21 """
22
23 # 读文件,获取用户信息 str
24 f1 = open('db', 'r')
25 content = f1.read()
26 f1.close()
27
28 # 转换用户信息从str到list
29 user_data_list = content.split('\n')
30 user_detail_list = []
31
32 # 将用户信息以字典的形式保存到列表
33 for user_info in user_data_list:
34 user_detail = user_info.split('|')
35 user_detail_list.append({
36 'name': user_detail[0],
37 'pwd': user_detail[1],
38 'times': user_detail[2]
39 })
40
41 print("""
42 欢迎来到老男孩教育集团,请先登录!
43 """)
44
45 # 主程序退出标志位
46 flag = True
47 # 退出次数
48 exit_flag = 3
49 # main process
50 while flag:
51 user_name = input("用户名(退出[quit]): ")
52 # 退出判断
53 if user_name != 'quit':
54 # 遍历用户信息列表
55 for item in user_detail_list:
56 # 判断用户名是否存在
57 if user_name == item['name']:
58 # 用户存在判断是否锁定
59 if int(item['times']) < exit_flag:
60 user_pwd = input("密码: ")
61 # 校验密码
62 if user_pwd == item['pwd']:
63 print('登录成功')
64 # 更新字典
65 item['times'] = 0
66 # 更新while循环标志位
67 flag = False
68 # 退出for循环
69 break
70 else:
71 print('密码错误')
72 # 更新字典
73 item['times'] = int(item['times']) + 1
74 # 退出for循环,继续输入用户名
75 break
76 else:
77 print("用户已经锁定")
78 break
79 else:
80 print('用户名不存在')
81 else:
82 flag = False
83
84 # 最后,将用户信息写入文件
85 # 处理字符串
86 result_info = ''
87 for item in user_detail_list:
88 item_str = '%s|%s|%s' % (item['name'], item['pwd'], item['times'])
89 if result_info.strip() == '':
90 result_info += item_str
91 else:
92 result_info = result_info + '\n' + item_str
93
94 # 写入文件
95 f2 = open('db', 'w')
96 f2.write(result_info)
97 f2.close()