作业需求:
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
实现思路:
- 判断用户是否在黑名单,若在黑名单,则将用户锁定
- 判断用户是否存在,若不存在,提示用户不存在
- 若用户存在,判断登录密码是否正确,若正确,则欢迎用户成功登录,提供用户三次密码输入机会,若三次输入错误,则将账户锁定
方式一:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
count = 0 #计数器
username = "aaa" #登录用户名
userpassword = "asd" #登录密码
#读取黑名单用户
f = open("aaa.txt","r")
file_list = f.readlines()
f.close()
lock= []
name = input("登录用户名:")
#判断用户是否在黑名单
for i in file_list:
line = i.strip("\n")
lock.append(line)
if name in lock:
print("你的账户已锁定,请联系管理员。")
else:
#如果用户没有在黑名单,判断用户是否存在
if name == username:
#如果密码连续输错了三次,锁定账号
while count <3:
password = input("登录密码:")
if name == username and password == userpassword:
print("欢迎%s!"%name)
break
else:
print("账号和密码不匹配")
count +=1
else:
print("对不起,您的账号连续输错三次密码已被锁定,请联系管理员。")
f = open("aaa.txt","w+")
li = ['%s'%username]
f.writelines(li)
f.close()
else:
print("用户名不存在,请输入正确的用户名。")
方式二:
1 #新建两个文件,account.txt和account_lock.txt,在account中输入aaa 123
2 #其中account.txt采用只读形式,account_lock.txt则采用读写形式
3 import sys,os
4 count = 0
5 name_list = []
6 while count < 3:
7 name = input("请输入用户名:")
8 lock_file = open("account_lock.txt","r+") #读取黑名单,"r+":打开一个文件用于读写,"r":以只读方式打开文件
9 lock_list = lock_file.readlines()
10 #.readlines():一次读取整个文件,并将内容分析成一个行的列表,与.read()一样
11 #.readline():一次读取一行,当内存不够时使用.readline()
12 for lock_line in lock_list:
13 lock_line = lock_line.strip('\n')
14 if name == lock_line:
15 #如果输入的用户名位于黑名单,则程序异常退出
16 sys.exit("用户%s已经被锁定,请联系管理员解锁." %name)
17 #读取正确的用户名和密码
18 user_file = open("account.txt","r")
19 user_list = user_file.readlines()
20 for user_line in user_list:
21 (user,password) = user_line.strip('\n').split()
22 name_list.append(user_line) #.append():用于在列表末尾添加新的对象
23 print("---------",name_list)
24 #用户名正确,密码输入计数
25 if name == user:
26 i = 0
27 while i<3:
28 passwd = input("请输入密码:")
29 if passwd == password:
30 print("欢迎%s登录"%name)
31 sys.exit(0)
32 else:
33 if i<2:
34 print("用户%s密码错误,请重新输入,还有%d机会."%(name,2-i))
35 i += 1
36 else:
37 lock_file.write(name + '\n')
38 sys.exit("用户%s输错密码三次,用户将被锁定并退出,请联系管理员解锁."%name)
39 else:
40 pass
41 else:
42 #用户名输入错误计数
43 if count < 2:
44 print("用户%s不存在,请重新输入,还有%d次机会"%(name,2-count))
45 count += 1
46 else:
47 sys.exit("用户%s不存在,退出"%name)
48 #关闭已经打开的文件
49 lock_file.close()
50 user_file.close()