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.可以增加注册系统,丰富登录界面等。