自学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来读取和写入用户的数据,然后在利用字典进行比较以此实现密码检测。
浙公网安备 33010602011771号