一个简单的注册、登录程序

#一个简单的注册。登录程序。已实现反射,用户只需要输入数字即可选择功能。可保留注册信息。定义了一个只有退出功能的函数。
class User:
def __init__(self, name, pwd):
self.name = name
self.pwd = pwd
class Authentic:
def __init__(self):
self.userFile = "user.txt"
def user_exist(self): #将保存用户名密码的文件打开,信息保存在生成器里,便于后面使用:
# 1.注册时验证是否有同名的。2.登录时验证用户名、密码。不需要传参。
with open(self.userFile,"r",encoding="utf-8") as f:
for line in f:
line = line.strip()
line_new = line.split("#")
yield line_new
def register(self): #注册功能
while True:
username=input('请输入用户名:')
for lst in list(self.user_exist()):
if lst[0]== username:
print('已有同名的,请重新输入!')
return #如果输入错误,就要退出重新选择。如何只返回到
#“username=input('请输入用户名:')”这一行呢?
password=input('请输入密码:')
password2=input('请确认密码:')
if password==password2:
user=User(username,password)
with open(self.userFile,"a",encoding="utf-8")as f:
temp = " " + username + "#" + password
#' '解决存入时不换行的问题。但有个缺点,txt文件的第一行总是空行。
f.write(temp)
print('注册成功,请转人登录界面。')
return False
else:
print('你两次输入的密码不一致,请重新输入!')
def login(self):
username=input('请输入用户名:')
pwd=input('请输入密码:')
for lst in list(self.user_exist()):
if lst[0]== username and lst[1]==pwd:
print('登录成功!')
break
else:
print('用户名或密码错误,请检查后重新输入!')
def ex(self): #定义了只有退出功能的函数,用户只需输入'3',即可退出。
exit() #函数名不能是exit。
def run(self):
opt_lst= [['登录','login'],['注册','register'],['退出','ex']]
#解决了中文字符串与对应的函数名称不一致的问题。
while True:
for index,item in enumerate(opt_lst,1):
#给列表设置索引,便于用户输入数字。
print(index,item[0],item[1])
num = int(input('请输入您要操作的序号 :').strip())
for index,item in enumerate(opt_lst,1):
if num==index:
if hasattr(obj,item[1]): #此处必须反射对象(obj)中的函数。
if getattr(obj,item[1]):
getattr(obj,item[1])()
if __name__ == '__main__':
obj = Authentic()
obj.run()
原文地址:https://www.cnblogs.com/qqq789001/p/13450917.html