自学Python之简易用户登陆

一、利用字典保存用户数据

  本人小白,之前在学习了爬虫之后,对Pyhton有了一个深刻的印象,觉得这是一个相比其他常见编程语言而言较为简洁的编程语言。于是便决定利用自己空余的时间自学一下Pyhton。

   在经过了对其简单的了解之后,决定编写一些小代码来练习一下。于是便决定使用字典来实现用户的登陆。代码如下:

 

 1 #info_users = {'M':'111','S':'222'} 
 2 info_users = {} #保存用户账号及密码
 3 info_users_locked ={} #保存被锁定的用户账号及密码
 4 def user_login():
 5     count = {} #输入错误密码的计数
 6     while True:
 7         username = input('username:')
 8         password = input('password:')   #输入用户账号及密码
 9         for info_user_locked in info_users_locked:
10             if username == info_user_locked:    #检测给用户是否被锁定
11                 print('this user was locked!')
12         for info_user in info_users:        #根据账号检测密码是否正确
13             if info_user == username:
14                 if info_users[info_user] == password:
15                     print('Welcome user {} login....'.format(info_user))
16                     return
17                 else:
18                     print('invalid username or password')
19                     count[username] += 1   #密码错误,该用户计数+1
20                     #print(count)
21                     break
22         else:   #所输入的不存在,保存在字典中,并增加进计数
23             info_users[username] = password
24             count[username] = 0
25             #print(info_users)
26         if count[username] == 3:  #用户锁定条件
27             print('user {} was locked'.format(info_user))
28             info_users_locked[username] = info_users[username]
29 
30 
31 
32 
33 
34 if __name__ == '__main__':
35     user = user_login()

 

 代码较为简单,主要是利用字典保存用户的账号及密码,利用键值的关系,能够进行简单的登陆信息检测。

二、利用文件保存数据

  在了解了文件的机制后,决定使用文件来保存数据,以此继续补充。用户数据为提前输入,代码如下:

 

 1 import pickle
 2 
 3 #获取被锁用户的数据
 4 def get_locked_info():
 5     locked_users =[]
 6     try:                                 #此处不加入异常处理的话会由于文件为空导致报错
 7          with open('locked_users.txt','rb') as locked_users_file:
 8             locked_users = pickle.load(locked_users_file)
 9             #print(locked_users)
10             locked_users_file.close()
11             return locked_users
12     except EOFError:
13         return {}
14 
15 #获取用户数据
16 def get_info():
17     info_users = {}
18     users_file = open('info_users.txt','rb')
19     info_users = pickle.load(users_file)
20     users_file.close()
21     #print(info_users.keys())
22     return info_users
23 
24 #检测用户名及密码,并将输入密码错误3次的用户锁定保存在锁定文件中
25 def check(user,pwd,info_users,count,locked_user):
26     for info_user in info_users:
27         if user == info_user:
28             if pwd == info_users[info_user]:
29                 print('Welcom to login!')
30                 break
31             else:
32                 print('Error of username or password!')
33                 count[user] += 1 #密码错误计数
34                 if count[user] == 3:   #错误为3次,保存入另一个文件
35                     locked_user.append(user)
36                     #print(locked_user)
37                     locked_users_file = open('locked_users.txt','wb')
38                     pickle.dump(locked_user,locked_users_file)
39                     locked_users_file.close()
40                 print(count)
41                 break
42     else:
43         print('Not find this id!')
44     return locked_user
45 
46 #判断该用户是否被锁
47 def isLocked(user,locked_users):
48     for i in range(len(locked_users)):
49         if user == locked_users[i]:
50             #print(locked_users[i])
51             print('This username was locked!')
52             return 0
53     return 1
54 
55 #初始化错误计数
56 def init_count(infos):
57     count = {}#保存各个用户所对应的错误次数
58     for info in infos:
59         count[info] = 0
60     return count
61 
62 if __name__ == '__main__':
63     locked_user = []  # 用来保存将被锁定的用户名
64     info_users = get_info() #获取用户数据
65     count = init_count(info_users) #初始化计数
66     while True :
67         locked_users = get_locked_info()#获取被锁用户
68         username = input('username:')
69         password = input('password:')  #输入用户名及密码
70         judge = isLocked(username,locked_users)
71         if judge == 0:     #当所输入的用户名被锁,退出循环
72             break
73         check(username,password,info_users,count,locked_user) #检测密码是否正确

 

  大致就是利用pickle来读取和写入用户的数据,然后在利用字典进行比较以此实现密码检测。

 

posted on 2019-03-11 17:26  自宅小明  阅读(258)  评论(0)    收藏  举报

导航