使用Python实现下述功能。
用户需要注册才能登录系统,注册需要填写账号和两次密码,密码长度小于6位或两次密码不一致抛出对应异常。新注册的用户没有权限。用户登录后,如果有权限,则可以执行吃饭、睡觉、学习3种操作,如果没有权限则抛出异常。管理员可以为用户赋予权限。试图选择不存在的用户会抛出异常。
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
class User:
def __init__(self, username, password):
self.__username = username
self.__password = password
self.__permissions = []
def get_username(self):
return self.__username
def get_password(self):
return self.__password
def add_permission(self, permission):
self.__permissions.append(permission)
def eat(self):
if "eat" in self.__permissions:
print("Eating...")
else:
raise PermissionError("No permission for eating")
def sleep(self):
if "sleep" in self.__permissions:
print("Sleeping...")
else:
raise PermissionError("No permission for sleeping")
def study(self):
if "study" in self.__permissions:
print("Studying...")
else:
raise PermissionError("No permission for studying")
class Authenticator:
__users = []
def __init__(self):
pass
def sign_up(self, username, password1, password2):
if len(self.__users) == 0:
if len(password1) < 6:
raise PasswordTooShortError()
elif password1 != password2:
raise PasswordUnequalError()
else:
new_user = User(username, password1)
self.__users.append(new_user)
print("Sign up success")
else:
for user in self.__users:
if username == user.get_username():
raise UsernameAlreadyExistsError(username)
elif len(password1) < 6:
raise PasswordTooShortError()
elif password1 != password2:
raise PasswordUnequalError()
else:
new_user = User(username, password1)
self.__users.append(new_user)
print("Sign up success")
def login(self, username, password):
for user in self.__users:
if username == user.get_username() and password == user.get_password():
print("Login success")
return user
raise LoginError()
class Authorizer:
__all_permissions = ["eat", "sleep", "study"]
def __init__(self):
pass
def add_permission_to_user(self, user, permission_number):
try:
permission = Authorizer.__all_permissions[permission_number]
except IndexError:
raise IndexError("Permission not exists")
user.add_permission(permission)
print("Add permission success")
class UsernameAlreadyExistsError(Exception):
def __init__(self, username):
self.__username = username
def __str__(self):
return f"Username {self.__username} already exists"
class PasswordTooShortError(Exception):
def __str__(self):
return "Password too short"
class PasswordUnequalError(Exception):
def __str__(self):
return "Two input passwords not equal"
class LoginError(Exception):
def __str__(self):
return "Login failed"
if __name__ == "__main__":
authenticator = Authenticator()
# 注册
authenticator.sign_up("user1", "password1", "password1")
# 登录
user1 = authenticator.login("user1", "password1")
authorizer = Authorizer()
# 增加eat权限
authorizer.add_permission_to_user(user1, 0)
user1.eat()