DAY8课下作业
一、实现用户注册功能
思路:
用户输入用户名、密码
将用户输入的内容按照固定的格式,比如:egon:123,存入文件
可以往一个文件中重复注册新的用户名和密码
附加:
1、对输入的用户名进行合法性监测,不能以数字开头,且如果输入的用户名已存在于文件中则要求用户重新输入
2、对输入的密码进行合法性监测,密码的长度至少6位,并且不能包含特殊字符*&$
import string
dig = string.digits
pun = string.punctuation
tag = True
while tag:
while tag:
name = input('请输入您要注册的用户名: ').strip()
if name[0] not in dig:
with open('db1.txt', 'rt', encoding='utf-8')as f:
for keys in f:
if name in keys:
print('用户名已存在,请重试。')
tag = False
break
else:
print('用户名可用。')
break
else:
print('用户名首位不能为数字,请重新输入。')
while True:
pwd = input('请输入您要注册的密码: ').strip()
if len(pwd) > 6:
for items in pwd:
if items in pun:
print('密码不能包含特殊字符,请重试。')
break
else:
print('注册成功。')
break
else:
print('密码长度不能小于6位,请重试。')
with open('db1.txt', mode='at', encoding='utf-8') as f:
info = '%s:%s\n' % (name, pwd)
f.write(info)
choice = input('是否继续注册(Y/N):')
if choice == 'Y':
tag = True
else:
tag = False
print('=' * 100)
二、实现用户验证功能更:
思路:
用户输入账号密码,从文件中读出账号密码,与用户输入的进行比对
附加:新建黑名单文件,同一个账号名输错三次则将用户名写入黑名单文件中,如果用户输入的用户名存在于黑名单中则直接退出
import sys
count = 0
while count < 3:
inp_name = input("请输入用户名:").strip()
with open("account_lock.txt", "r+", encoding="utf-8") as lock_file:
for lock_line in lock_file:
if lock_line == inp_name:
sys.exit("用户%s已被锁定,请联系管理员" % inp_name)
with open("db.txt", "rt", encoding="utf-8") as user_file:
for user_line in user_file:
(name, pwd) = user_line.strip().split(":")
if name == inp_name:
i = 0
while i < 3:
password = input("请输入密码:")
if pwd == password:
sys.exit("恭喜%s登陆成功" % inp_name)
else:
if i < 2:
print("密码错误,请重新输入,你还有%s次机会" % (2 - i))
i += 1
else:
lock_file.write(inp_name + "\n")
sys.exit("密码出错次数过多,账号已被锁定")
else:
if count<2:
print("用户 %s 不存在,请重新输入,还有 %d 次机会" %(inp_name,2-count))
count+=1
else:
sys.exit('用户 %s 不存在,退出' % inp_name)