zoukankan      html  css  js  c++  java
  • 一个简单的注册、登录程序

    #一个简单的注册。登录程序。已实现反射,用户只需要输入数字即可选择功能。可保留注册信息。定义了一个只有退出功能的函数。
    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()
  • 相关阅读:
    「网络流 24 题」太空飞行计划
    Wannafly挑战赛2D Delete (最短路好题)
    牛客 216 C 小K的疑惑
    Till I Collapse CodeForces
    bzoj 2734 集合悬殊 (状压dp)
    图写成一个类(2)
    写程序的易错点(不定期更新)
    强联通分量之kosaraju算法
    对各种lca算法的理解
    pb_ds的优先队列实现dijkstra
  • 原文地址:https://www.cnblogs.com/qqq789001/p/13450917.html
Copyright © 2011-2022 走看看