基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序
升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)
第一次
l = {'zheng': '123', 'xiao':'123'} # 定义帐号和密码的存储
num = 3 # 控制循环次数初始值
#获取程序是否为锁定状态
def Test():
f = open('user', 'r', encoding='UTF-8')
for i in f:
if int(i) == 1:
return True
else:
return False
func = Test()
while num > 0:
if func == False:
print('输入次数错误太多,程序已被锁定,请联系管理员')
break
User = input('请输入帐号:')
pwd = input('请输入密码:')
if User in l.keys():
if pwd in l.values():
print('欢迎登入')
break
else:
num -= 1
print(f'帐号或者密码错误,还剩下{num}次机会')
continue
# 判断次数达到3次时,进行写文件,达到锁定目的
f = open('user', 'w', encoding='UTF-8')
f.write('2')
f.close()
问题点1:
文件操作直接使用open不是很好,需要每次执行玩都要进行close()关闭操作,建议使用with as 方法,
问题点2:
在进行判断时,无法准确的判断该key值是否对应该value值
问题3:
在进行input输入时,应该对该值进行去空格出去,使用strip()去空格
修改后代码
1 l = {'zheng': '678', 'xiao':'123'}
2 num = 3
4 判断是否为锁定状态
5 def test():
6 with open('user', 'r', encoding='UTF-8') as f:
7 for i in f:
8 if int(i) == 1:
9 return True
10 else:
11 return False
12
13 对文件进行写操作,进行锁定
14 def con():
15 with open('user', 'w', encoding='UTF-8') as f:
16 f.write('2')
17
18
19 func = test()
20 while num > 0:
21 if func == False:
22 print('输入次数错误太多,程序已被锁定,请联系管理员')
23 break
24 User = input('请输入帐号:')
25 User = User.strip()
26 pwd = input('请输入密码:')
27 pwd = pwd.strip()
28 if User in l.keys() and pwd in l[User]:
29 print('欢迎登入')
30 break
31 else:
32 num -= 1
33 if num == 0:
34 print('输入错误次数过多,程序已被锁定')
35 con() #错误3次后,调用修改文件函数进行锁定
36 break
37 print('帐号或者密码错误,还剩下%s次机会' % num)
38 continue