用户登录验证,记录一下,还需要修改黑名单不合理

1 #!/usr/bin/env python3
 2 '''
 3 需求:编写登录接口
 4 1、输入用户名和密码
 5 2、验证用户密码成功后输出欢迎消息
 6 3、3次没有验证通过锁定账户
 7 '''
 8 # user = {'test1':'123','test2':'234','test3':'345'}
 9 #将文件内容转换为字典
10 with open('user_pass_sql', 'r')as f:
11     user = dict(line.strip().split(':') for line in f if line)
12     # print(user)#打印字典user
13 f.close()
14 
15 # print(user.keys())#打印字典user的key
16 # print(user.values())#打印字典user的values
17 user_input=input('Name:').strip()#用户输入账户
18 user_passwd=input('Passwd:')#用户输入密码
19 
20 # fblack = open('black_list','r')#打开黑名单文件
21 # for  len(user_input) == fblack.readlines():#判断用户是否在黑名单
22 #     print('Account lockout!!!')
23 for line in open('black_list','r'):
24     if user_input == line.strip():
25         print('Account lockout!!!')
26         break
27         # fblack.close()#关闭文件
28     if len(user_input) == 0:#判断用户输入是否为空
29         print('Users cannot be null!!')
30         break
31 else:
32 # if list(user.keys())[a] == user_input and list(user.values())[a] == user_passwd:
33     if user_input in user and user_passwd == user[user_input]:#判断用户名和密码是否一致
34         print('Login successfully!Welcome!!!')
35     else:
36         #用户或者密码错误进入循环2次
37         for i in range(2):
38             print('User or Passwd error!!')
39             user_input = input('Name:').strip()
40             user_passwd = input('Passwd:')
41             if user_input in user and user_passwd == user[user_input]:#判断用户输入的用户名和密码时候和文件中匹配
42                 print('Login successfully!Welcome!!!')
43                 break#跳出循环
44         else:
45             black_list = open('black_list','a')#打开文件模式追加
46             black_list.write('\n')
47             black_list.write(user_input) #3次错误之后写入黑名单
48             black_list.close()#关闭文件
49             print('Account lockout!!!')

 

 

重新写了一版:

 

1 #!/usr/bin/env python3
 2 def black_list():
 3     with open("black_list", "a") as black:
 4         black.write('\n' + user_input.strip())                  #将变量user_input写到文件中,\n为换行
 5 
 6 with open('user_passwd', 'r') as f:                             #打开用户密码文件
 7     user = dict(line.strip().split(":") for line in f if line)#将文件内容转换为字典
 8 
 9 passwd_error = []                                             #创建密码错误列表,密码错误一次将用户写入列表
10 user_does_not_exist = []                                      #创建不存在用户列表,不存在用户写入列表
11 
12 for i in range(10):                                             #循环10次
13     user_input = input("Name:").strip()                         #输入账号,strip去除两侧空格
14     user_passwd = input("Passwd:").strip()                      #输入密码,strip去除两侧空格
15     with open("black_list","r") as black:                       #打开黑名单文件
16         if user_input in black:                                 #判断用户是否在黑名单中
17             print("◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n"
18                   "◇◇◇◇◇◇◇◇◇账户被锁定,请与管理员联系!!◇◇◇◇◇◇◇◇\n"
19                   "◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n")
20             break                                               #退出循环
21         elif len(user_input) == 0:                              #判断用户输入是否为空格
22             print("◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n"
23                   "◇◇◇◇◇◇◇◇◇◇◇◇用户名不能为空!!◇◇◇◇◇◇◇◇◇◇◇\n"
24                   "◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n")
25             continue                                             #退出本次循环
26         else:
27             if user_input in user and user[user_input] == user_passwd:#判断用户名和密码是否一致
28                 print("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"
29                       "※※※※※※※※※※※※※欢迎登陆!!※※※※※※※※※※※※※※※\n"
30                       "※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n")
31                 break
32             elif user_input not in user:                            #判断用户是都存在
33                 print("◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n"
34                       "◇◇◇◇◇◇◇◇◇◇◇◇用户不存在,请重试!!◇◇◇◇◇◇◇◇◇◇◇◇\n"
35                       "◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n")
36                 user_does_not_exist.append(user_input)              #用户不存在就写入用户不存在列表中
37                 if user_does_not_exist.count(user_input) == 5:      #统计用户不在列表中不存在的用户次数,超过5次锁定
38                     print("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"
39                           "☆☆☆☆☆☆☆☆☆☆☆尝试次数过多,账户锁定!!☆☆☆☆☆☆☆☆☆☆☆\n"
40                           "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n")
41                     black_list()                                    #调用函数black_list
42                     break
43             else:
44                 print("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"
45                       "☆☆☆☆☆☆☆☆☆☆☆☆☆密码错误!!☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"
46                       "☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n")
47                 passwd_error.append(user_input)                     #将密码错误用户写入密码错误列表中
48                 if passwd_error.count(user_input) == 3:             #统计密码错误用户是否超过3次
49                     print("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n"
50                           "〓〓〓〓〓〓〓〓〓〓密码错误3次,账户锁定,请联系管理员!!〓〓〓〓〓〓〓〓〓〓\n"
51                           "〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n")
52                     black_list()                                    #调用函数black_list
53                     break
54                 else:
55                     continue                                        #退出当前循环
56 else:
57     print("〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n"
58           "〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓尝试次数过多!!〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n"
59           "〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n")

 

 

 再修改一下:

1 #!/usr/bin/env python3
 2 def black_list():
 3     with open("black_list", "a") as black:
 4         black.write('\n'+user_input.strip())                  #将变量user_input写到文件中,\n为换行
 5 
 6 with open('user_passwd', 'r') as f:                             #打开用户密码文件
 7     user = dict(line.strip().split(":") for line in f if line)#将文件内容转换为字典
 8 
 9 passwd_error = []                                             #创建密码错误列表,密码错误一次将用户写入列表
10 user_does_not_exist = []                                      #创建不存在用户列表,不存在用户写入列表
11 
12 break_flag = False                                            #默认设置为False,用来退出多层循环
13 continue_flag = False
14 for i in range(10):                                             #循环10次
15     user_input = input("Name:").strip()                         #输入账号,strip去除两侧空格
16     user_passwd = input("Passwd:").strip()                      #输入密码,strip去除两侧空格
17     with open("black_list","r") as black:                       #打开黑名单文件
18         for line in black:
19             if user_input == line.strip():                         #判断用户是否在黑名单中
20                 Tips = '账户%s被锁定,请与管理员联系!'%user_input      #定义字符串,将用户输入变量带入字符串,%s代替用户输入
21                 print(Tips.center(30,'*'))                          #字符串center方法,字符串居中,30为总长度,空白处用*代替
22                 break_flag = True                                   #将break_flag的值重新定义
23                 break                                               #退出循环
24         if break_flag == True:                                      #判断break_flag的值是否为True
25             break
26         if len(user_input) == 0 or len(user_passwd) == 0:      #判断用户输入是否为空格
27             Tips = '用户名或密码不能为空!'
28             print(Tips.center(30,'*'))
29             continue                                         #退出本次循环
30     if user_input in user and user[user_input] == user_passwd:#判断用户名和密码是否一致
31         Tips = '欢迎用户%s登录系统'%user_input
32         print(Tips.center(30,'*'))
33         break
34     elif user_input not in user:                            #判断用户是都存在
35         Tips = '用户%s不存在,请重试!'%user_input
36         print(Tips.center(30,'*'))
37         user_does_not_exist.append(user_input)              #用户不存在就写入用户不存在列表中
38         if user_does_not_exist.count(user_input) == 5:      #统计用户不在列表中不存在的用户次数,超过5次锁定
39             Tips = '尝试次数过多,账户%s锁定!'%user_input
40             print(Tips.center(30,'*'))
41             black_list()                                    #调用函数black_list
42             break
43     else:
44         Tips = '密码错误!'
45         print(Tips.center(30,'*'))
46         passwd_error.append(user_input)                     #将密码错误用户写入密码错误列表中
47         if passwd_error.count(user_input) == 3:             #统计密码错误用户是否超过3次
48             Tips = '密码错误3次,账户%s锁定,请联系管理员!'%user_input
49             print(Tips.center(30,'*'))
50             black_list()                                    #调用函数black_list
51             break
52         else:
53             continue                                       #退出当前循环
54 else:
55     Tips = '尝试次数过多!'
56     print(Tips.center(30,'*'))