python 登录注册

# 定义列表,存放已经注册的用户信息
userlist = []  # 存放所有的用户名
pwdlist = []  # 存放所有的用户名对应的密码
blacklist = []  # 存放所有的黑名单用户


# 读取所有数据的方法
def readallusers():
    with open('user.txt', 'r', encoding='utf-8') as f:
        f.seek(0)  # 光标定位到user.txt文件的头部
        res = f.readlines()  # 读取文件的所有数据 返回列表 列表每一个元素是文件的一行数据
        for i in res:
            j = i.strip()  # 处理每一个换行 admin:123456\n ==>admin:123456
            arr = j.split(":")  # 以admin:123456中的:来分割数据,返回列表形式 [admin,123456]
            userlist.append(arr[0])  # 把用户名添加到列表
            pwdlist.append((arr[1]))  # 把密码添加到列表
    #         print(userlist) #['admin', 'chun', 'zhangsan']  测试用
    #         print(pwdlist)  #['123456', '666666', '888888']    测试用

    with open('blackuser.txt', 'r', encoding='utf-8') as f:
        f.seek(0)
        res = f.readlines()
        for i in res:
            blacklist.append(i.strip())  # 黑名单只有名字,不会存密码
        # print(blacklist) 测试用


# readallusers()


# 注册
def register():
    # 定义一个变量,控制外循环
    site = True
    while site:
        # 用户输入用户名
        name = input("请输入用户名:")
        # 用户名需要检测是否已经存在
        if name in userlist:
            # 用户名存在,则需要重新输入用户名
            print("此用户已经存在,请重新输入!")
        # 用户名不存在
        else:
            # 循环输入密码,直到输入正确,退出循环
            while True:
                # 输入密码
                pwd = input("请输入密码:")
                # 检测密码长度不能低于3
                if len(pwd) > 3:
                    # 密码长度大于3,则需要再次输入密码
                    repwd = input("请再次输入密码:")
                    # 检测确认密码与密码是否一致
                    if pwd == repwd:
                        # 用户名、密码正确,就可以写入文件。格式-》用户名:密码
                        with open('user.txt', 'a+', encoding='utf-8') as f:
                            # f.seek(0, 2)  # 2代表把光标定位到文件末尾 0代表左右移动0位。
                            # 输出格式print(f'{}') 单引号才生效,双引号无法生效
                            f.write(f'{name}:{pwd}\n')
                            print("注册成功,用户名{}。".format(name))
                            # 结束循环
                            # 结束外循环
                            site = False
                            # 结束内循环
                            break

                    else:
                        print("两次密码输入不一致。")
                else:
                    print("输入的密码长度应该大于3,请重新输入!")


# 登录
def login():
    # 错误次数最多3次
    num = 3
    site = True
    while site:
        name = input("请输入需要登录的名称:")
        if name in userlist:
            # 检测输入的用户是否在用户列表中,如果在则再校验是否也存在在黑名单中
            if name in blacklist:
                # 在黑名单,则需要重新输入用户名
                print("该用户已列入黑名单,不允许登录平台!")
            else:
                while True:
                    # 不在黑名单,则输入密码
                    pwd = input("请输入密码:")
                    # 判断输入的密码与user.txt里的密码是否一致
                    # 通过.index(输入的用户名)得到索引inx
                    inx = userlist.index(name)
                    # 通过pwdlist[inx]得到对应的密码
                    if pwd == pwdlist[inx]:
                        print("登录成功")
                        site = False
                        break
                    else:
                        # 密码不正确,则减少一次输入密码的次数
                        num -= 1
                        # 次数小于0次,则不允许输入。
                        if num == 0:
                            print("3次机会已使用完,该用户将被锁定!")
                            # 密码输入三次失败后,需要把该用户加入黑名单
                            with open('blackuser.txt', 'a+', encoding='utf-8') as f:
                                f.write(f'{name}\n')
                                site = False
                                break
                        else:
                            print("密码不正确,请重新输入密码,你还有%d次机会输入密码" % (num))

        else:
            print("用户不存在,请重新输入!")


# 调用注册
# register()
#调用登录
# login()

if __name__=='__main__':
    readallusers()
    while True:
        vars="登录1,注册2,退出(任意内容):"
        print(vars)
        num=input('请输入对应的对号:')
        if num=='1':
            login()
        elif num=='2':
            register()
        else:
            print("欢迎下次再来...")
            break

这个案例是照着他人的写的,忘记了他人的链接是啥了【挠头

以后再次看到了就标记上

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值