周末(密码+登录注册)
"""
语法:raise 异常类型
说明:
1)raise - 关键字;固定写法
2)异常类型 - 可以是系统提供的异常类型(例如:IndexError、ValueError、KeyError、TypeError等);
也可以是自定义错误类型(自定义错误类型必须是Exception的子类)
"""
class PasswordError(Exception):
def __str__(self):
return '密码输入有误!'
def input_pswd():
pw = input('请输入密码:')
if len(pw) < 8:
raise PasswordError
if 8 <= len(pw) <= 15:
new_str = ''
for x in pw:
if x in '~!@#%^*' and x not in new_str:
new_str += x
if len(new_str) >= 2:
return pw
raise PasswordError
return pw
print(input_pswd())
"""
==============================
1. 登录
2. 注册
==============================
请选择:
"""
"""
数据持久化:因为需要下一次运行程序的时候可以使用上一次注册的账号,所以已经注册过的账号需要持久化
1)确定持久化对象:所有已经注册过的账号和对应密码
2)创建保存数据的文件
3)确定文件初始内容:一个用户占一行,每一行内容是'用户名;密码'
4)需要数据的时候从文件中获取数据
5)数据发生改变把最新的数据写入文件中
"""
def get_all_user_info():
"""获取账号文件内容,并且将文件内容转换成字典"""
f = open('files/user.txt', encoding='utf-8')
all_user = {}
for line in f.readlines():
name, pw = line.strip().split(';')
all_user[name] = pw
f.close()
return all_user
def register():
print('~~~~~正在注册~~~~~~')
username = input('请输入账号(不能包含分号):')
pw = input('请输入密码(不能包含分号):')
if ';' in username or ';' in pw:
print('注册失败,账号或者密码不合法')
return
all_user = get_all_user_info()
if username in all_user:
print('注册失败,该账号已经存在!')
return
f = open('files/user.txt', 'a', encoding='utf-8')
f.write(f'{username};{pw}\n')
print('注册成功!')
def login():
print('~~~~~~~正在登录~~~~~~~~')
username = input('请输入账号:')
pw = input('请输入密码:')
all_user = get_all_user_info()
if username not in all_user:
print('登录失败! 该账号没有注册!')
return
if all_user[username] != pw:
print('登录失败!密码不对!')
else:
print('登录成功!')
def welcome():
print('==============================')
print('🌹 1. 登录')
print('🌹 2. 注册')
print('==============================')
value = input('😁请选择:')
if value == '1':
login()
elif value == '2':
register()
else:
print('输入有误!')
if __name__ == '__main__':
welcome()