这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战
题目
# :编写用户登录接口
#1、输入账号密码完成验证,验证通过后输出"登录成功"
#2、可以登录不同的用户
#3、同一账号输错三次锁定,(提示:锁定的用户存入文件中,这样才能保证程序关闭后,该用户仍然被锁定)
users.txt内容
r0ya1:r0ya1
root:root
admin:admin888
abc:123
black_users.txt开始为空
完整代码:
# 获取用户输入的用户名和密码
flag = True
black_list = []
while flag:
in_user = input('请输入用户名:').strip()
in_pwd = input('请输入密码:').strip()
# 打开两个文件,可读写模式
with open('./black_users.txt',mode='rt+',encoding='utf-8') as f1,\
open('./users.txt',mode='rt',encoding='utf-8') as f2:
# 先判断是否在黑名单内,如果在,直接锁定,退出循环
for line in f1:
username = line.strip()
if username == in_user:
print('抱歉您的账号被锁定')
flag = False
break
# 如果不在,则判断用户名、密码是否与已知的一致,一致则登陆成功
for line in f2:
username,password = line.strip().split(':')
if username == in_user and password == in_pwd:
print('登陆成功')
flag = False
break
# 如果符合锁定条件,则开始计数,准备锁定账号
elif username == in_user and password != in_pwd:
print('账号密码错误')
black_list.append(in_user)
# 同一个账号,密码输错三次则锁定
if black_list.count(in_user) >= 3:
flag = False
print('抱歉,您的密码输错三次,账号已被锁定')
username = in_user + '\n'
f1.write(username)
break
思路:
1.首先我们还是先写个用户输入,并处理空白符
in_user = input('请输入用户名:').strip()
in_pwd = input('请输入密码:').strip()
2.然后打开两个文件,users存放已注册账号,black_users为锁定用户,存放输错三次密码的账号
# 打开两个文件,可读写模式
with open('./black_users.txt',mode='rt+',encoding='utf-8') as f1,\
open('./users.txt',mode='rt',encoding='utf-8') as f2:
3.先判断输入的用户名是否在黑名单中,如果在,直接结束
# 先判断是否在黑名单内,如果在,直接锁定,退出循环
for line in f1:
username = line.strip()
if username == in_user:
print('抱歉您的账号被锁定')
4.如果不在,则判断是否与已注册账密一致,若一致,则直接登录成功
# 如果不在,则判断用户名、密码是否与已知的一致,一致则登陆成功
for line in f2:
username,password = line.strip().split(':')
if username == in_user and password == in_pwd:
print('登陆成功')
5.如果同一个账号输入密码三次,我们需要锁定该账号,这里我们需要针对单个账号进行锁定,所以我们可以事先设个列表
black_list = []
6.如果符合锁定条件则把账号添加到这个列表中
# 如果符合锁定条件,则开始计数,准备锁定账号
elif username == in_user and password != in_pwd:
print('账号密码错误')
black_list.append(in_user)
7.接着判断这个账号在列表中的个数是否大于等于3,若是,则提示账号已被锁定,然后写入black_users.txt文件中
if black_list.count(in_user) >= 3:
print('抱歉,您的密码输错三次,账号已被锁定')
username = in_user + '\n'
f1.write(username)
8.现在整个重要代码已经完成了,但是我们还需要一个循环,因为我们是需要用户重复输入用户密码,如果用户在黑名单之中,则退出循环,不必再输入;如果用户输入的账密正确,则退出循环,不必再输入;如果账号对了,密码错误则重新输入,若错了三次,则锁定该账号;若账号密码都不对,则重复输入,所以最后就是
# 获取用户输入的用户名和密码
flag = True
black_list = []
while flag:
in_user = input('请输入用户名:').strip()
in_pwd = input('请输入密码:').strip()
# 打开两个文件,可读写模式
with open('./black_users.txt',mode='rt+',encoding='utf-8') as f1,\
open('./users.txt',mode='rt',encoding='utf-8') as f2:
# 先判断是否在黑名单内,如果在,直接锁定,退出循环
for line in f1:
username = line.strip()
if username == in_user:
print('抱歉您的账号被锁定')
flag = False
break
# 如果不在,则判断用户名、密码是否与已知的一致,一致则登陆成功
for line in f2:
username,password = line.strip().split(':')
if username == in_user and password == in_pwd:
print('登陆成功')
flag = False
break
# 如果符合锁定条件,则开始计数,准备锁定账号
elif username == in_user and password != in_pwd:
print('账号密码错误')
black_list.append(in_user)
# 同一个账号,密码输错三次则锁定
if black_list.count(in_user) >= 3:
flag = False
print('抱歉,您的密码输错三次,账号已被锁定')
username = in_user + '\n'
f1.write(username)
break
\