1.程序目标
输入用户名密码
认证成功后显示欢迎信息
输错三次后锁定
2.思路
利用python中的pickle模块,实现用户登录信息(采用dict)和被锁定用户信息(采用list)的存储。所以我预先存储了一些用户信息和被锁定用户信息在两个.pkl文件里面。
输入用户名后先判断是否在锁定用户的list里面,如果在直接print账户被锁定。若不在,则判断账户密码是否有效。
3.程序实现
1 import pickle #导入pickle模块
2 pickle_file=open('userandcodes.pkl','rb')
3 userdict=pickle.load(pickle_file) #打开存储用户密码和账户的文件,并把里面的字典类型给userdict
4 pickle_file.close()
5
6 pickle_file1=open('userlock.pkl','rb')
7 locklist=pickle.load(pickle_file1) #打开被锁定用户的文件,并把里面的列表类型给locklist
8
9 count=0
10 while count<3:
11 username = input('username:')
12 while username not in userdict.keys():
13 print('Wrong Username,input again!') #检测用户名是否存在,直至用户输入正确的用户名(输错用户名不被计数)
14 username = input('username:')
15 password = input('password:')
16 if username not in locklist:
17 if password==userdict.get(username):
18 print('Welcome!.The user {0} loging...'.format(username))
19 break
20 else:
21 print('Wrong password....Input again')
22 count+=1
23 else:
24 print('You have tried 3 times before,your username has been locked')
25 break
26 else:
27 print('You have tried 3 times,your username is being locked')
28 locklist.append(username)
29 pickle_file1 = open('userlock.pkl', 'wb')
30 pickle.dump(locklist,pickle_file1)
31
32 pickle_file1.close()
4.遇到几个问题
A.pickle.load()老是报'' EOFError: Ran out of input ''(6,7行),最后发现是我pickle_file1文件是空文件导致的,所以我添加了几个元素到文件里面的locklist后问题解决。
B.字典dict访问values时,如果key是一个变量可以通过内置函数get()访问.
5.待改进的地方
a.仅限于同一账户密码输错三次锁定。在用户名正确的情况下,若三次输入的用户名不同,则也会被计入次数。
b.可以增加注册系统,丰富登录界面等。