Python脚本实现基于文件存储的用户登录程序

 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('
')
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 + '
' + item_str
93 
94 # 写入文件
95 f2 = open('db', 'w')
96 f2.write(result_info)
97 f2.close()
原文地址:https://www.cnblogs.com/alibner/p/6816215.html