Day04:用户登录、注册、修改密码、删除用户练习解答:
def outer(func):
'''
这是一个装饰器,来做用户登录验证。
:param func: 函数
:return: 登录的失败与否
'''
def inter(username,password):
a = open('db','r',encoding='utf-8')#获取数据
for i in a:#循环获取数据的每一行
i=i.strip()#去掉两边的空格或其他字符串
i=i.split('#')#以#号分割
if username == i[0] and password == i[1]: #判断用户输入的账号密码是用索引去对应的位置是否一样
print('登陆成功')#返回值
a=func(username,password)
return a
return '登录失败'#返回值
return inter
@outer
def Userdel(username,password):
'''
本函数用于删除用户
:param username: 用户账号
:param password: 用户密码
:return: 停止删除、删除成功
'''
cc=input('确认删除用户('+username+')\ty/n?')#自定义输入
if cc.lower() == 'n':#判断用户输入的是n
return '停止删除用户'
elif cc.lower() == 'y':#判断用户输入的是y
with open('db','r+',encoding='utf-8') as a: #打开文件db
ab=1 #标识,为什么了知道是不是第一个数据
txt=[] #定义一个空的列表为了先拿出来db里的账号密码进行保存
for i in a: #循环将账号密码存入到txt列表中
txt.append(i)
a=open('db','w+',encoding='utf-8') #重新打开db文件打开前清空
for i in txt: #循环执行txt列表
i=i.strip() #将txt循环出来的内容去掉两边的空格和一些其他的符号
i=i.split('#') #将txt循环出来的内容用#号分割
if i[0] == username and i[1] == password:#判断本次循环的是不是用户的账号密码,如果是就跳过本次写入
continue
if i == '': #判断本次循环中是空的,进行下一次循环
continue
if ab == 1:#判断本次是不是第一次循环,如果是在写入的时候不加回车
a.write(i[0]+'#'+i[1])
ab+=1
else:
a.write('\n'+i[0]+'#'+i[1]) #向打开文件内写入内容
a.close()#关闭文件
return '删除成功'#返回删除成功
else:
print('输入有误!')#用户输入的不是y或者n提示用户输入有误,并且重新调用自身函数!
Userdel(username,password)
@outer
def xiugai(username,password):
'''
本函数用于用户修改密码
:return: 修改成功
'''
a=input('请输入修改后的密码:') #自定义输入
b=input('请确认修改后的密码:') #自定义输入
if a != b : #判断用户两次输入的内容是不是一样的,如果不一样重新执行该函数、
xiugai(username,password)
with open('db','r+',encoding='utf-8') as a: #打开文件db
ab=1 #标识,为什么了知道是不是第一个数据
txt=[] #定义一个空的列表为了先拿出来db里的账号密码进行保存
for i in a: #循环将账号密码存入到txt列表中
txt.append(i)
a=open('db','w+',encoding='utf-8') #重新打开db文件打开前清空
for i in txt: #循环执行txt列表
i=i.strip() #将txt循环出来的内容去掉两边的空格和一些其他的符号
i=i.split('#') #将txt循环出来的内容用#号分割
if i[0] == username and i[1] == password:#判断本次循环的是不是用户的账号密码,如果是就修改了其密码
i[1] = b
if i == '': #判断本次循环中是空的,进行下一次循环
continue
if ab == 1:#判断本次是不是第一次循环,如果是在写入的时候不加回车
a.write(i[0]+'#'+i[1])
ab+=1
else:
a.write('\n'+i[0]+'#'+i[1]) #向打开文件内写入内容
a.close()#关闭文件
return '修改成功'#返回修改密码成功
def login(username,password):
"""
本函数用于用户名密码的验证。
:param username:用户账户
:param password:用户密码
:return:用户名密码正确返回登陆成功,否则登录失败。
"""
a = open('db','r',encoding='utf-8')#获取数据
for i in a:#循环获取数据的每一行
i=i.strip()#去掉两边的空格或其他字符串
i=i.split('#')#以#号分割
if username == i[0] and password == i[1]: #判断用户输入的账号密码是用索引去对应的位置是否一样
return '登陆成功'#返回值
return '登录失败'#返回值
def register(username,password):
"""
这个函数用于注册用户账户。
:param username: 用户名
:param password: 用户密码
:return: 返回是否成功。
"""
with open('db','r+',encoding='utf-8') as f:#去读现在又的账号密码
for i in f: #循环获取数据的每一行
i = i.strip()#去掉两边的空格或其他字符串
i = i.split('#')#以#号分割
if username == i[0] :#判断用户输入的账号是否存在
print('用户账户已存在!')#存在输出并重新执行
register(username,password)#重新执行函数
f.write('\n'+username+'#'+password)#成功创建用户,并一#号分割账号密码
return '注册成功' #返回注册成功
def main():
"""
登录和注册的主程序
:return: 没有
"""
li = ['注册','登录','修改密码','删除用户']
for k,v in enumerate(li):#循环输出列表内容并加上序号
print(k,v)
abc=input('请输入序号操作。')#自定义输入
if abc.isdigit():#判断是不是数字
abc=int(abc)#将用户输入的强制转换成数字类型
if abc == 0:
name=input("请输入账号")#自定义输入
pwd=input("请输入密码")#自定义输入
print(register(username=name,password=pwd))#执行函数注册
elif abc == 1 :
name=input("请输入账号")#自定义输入
pwd=input("请输入密码")#自定义输入
print(login(username=name,password=pwd))#执行函数登录
elif abc == 2:
name=input("请输入账号")#自定义输入
pwd=input("请输入密码")#自定义输入
print(xiugai(username=name,password=pwd))#执行函数修改密码
elif abc == 3:
name=input("请输入账号")#自定义输入
pwd=input("请输入密码")#自定义输入
print(Userdel(username=name,password=pwd))#执行函数修改密码
else:
print('请正确输入')#自定义输出
else:
print('请正确输入!')#自定义输出
main()#重新执行main函数
main() #执行函数main