用Python实现用户注册登录功能

完成如下用户注册/登陆功能,首页示例如下:
```
******************************
操作编码 操作
[0] 注册
[1] 登录
******************************
请输入你要进行的操作编码:
```
一、注册模块具体要求:
(1)提示用户输入,用户名和密码,其中密码需要输入 2 次。
> 提示用户名只能为字母、下划线和数字;密码不能超过 8 位,密码只能为数字
或大小写字母
(2)注册成功后,账户密码记录在文件中 (user.txt)
> 内容格式可以为
姓名:密码
(3)用户名不能重复。输入用户名重复,需要提示用户重新输入,示例如下:
```
--------------注册--------------
请输入用户名:abc
用户名已存在 请重新输入用户名:
```
(4)检测两次密码如果不同,提示两次密码不一致,检测两次密码如果相同,确认注
册成功,示例如下:
```
--------------注册--------------
请输入用户名:abc
请输入密码:123456
请再次输入密码:654321
密码不一致
请再次输入密码:
```
二、  登陆模块具体要求:
(1)用户登录时,进行三次校验,都不对,记录黑名单,并保存在文件中:blacklist.txt
```
--------------登陆--------------
请输入用户名:abc
请输入密码:123456
密码不正确
请再次输入密码:654321
密码不正确 您还有 1 次机会
请再次输入密码:987654
密码 3 次错误,禁止登陆,请联系管理员。
```
(2)如果是黑名单的用户,则禁止再次登录。
import os
import re


# 用户类,用于存储用户名和密码
class User:
    def __init__(self, username, password):
        self.username = username
        self.password = password

    # 注册功能


def register():
    while True:
        username = input("请输入用户名(只能包含字母、数字和下划线,且不能以数字开头):")
        if re.match("^[a-zA-Z_][a-zA-Z0-9_]*$", username):
            with open('user.txt', 'r') as f:
                if username in f.read().splitlines():
                    print("用户名已存在,请重新输入!")
                else:
                    break
        else:
            print("用户名格式错误,请重新输入!")

    while True:
        password = input("请输入密码(必须包含至少一个数字,一个大写字母,一个小写字母,且长度在8位以上):")
        if re.match("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$", password):
            break
        else:
            print("密码格式错误,请重新输入!")

    confirm_password = input("请再次输入密码:")
    if password == confirm_password:
        user = User(username, password)

    with open('user.txt', 'a') as f:
        f.write(f"{user.username}:{user.password}\n")
    print("注册成功!")

        # 登录功能


def login():
    with open('blacklist.txt', 'r') as f:
        blacklist = set(f.read().splitlines())
    username = input("请输入用户名:")
    password = input("请输入密码:")
    if username in blacklist:
        print("您已经被禁止登录。")
    else:
        with open('user.txt', 'r') as f:
            users = {line.split(":")[0]: line.split(":")[1] for line in f.readlines()}
        if username in users and users[username] == password:
            print("登录成功!")
        else:
            print("密码错误,您还有2次机会。")
            login()  # 递归调用,实现3次输入检查
            if username in blacklist:
                print("密码3次错误,禁止登录,请联系管理员。")
                with open('blacklist.txt', 'a') as f:
                    f.write(f"{username}\n")

                # 主函数,根据用户的选择进行注册或登录操作


def main():
    while True:
        print("******************************")
        print("操作编码 操作")
        print("[0] 注册")
        print("[1] 登录")
        print("******************************")
        choice = input("请输入你要进行的操作编码:")
        if choice == '0':
            register()
        elif choice == '1':
            login()
        else:
            print("无效的操作编码,请重新输入。")
            continue
        break  # 注册或登录后跳出循环,结束程序运行


if __name__ == "__main__":
    main()
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值