练习题_文件操作

完成用户注册/登陆功能。

******************************
操作编码	操作
[0] 	   注册
[1] 	   登录
******************************
请输入你要进行的操作编码:
  • 注册:

(1)提示用户输入,用户名和密码,其中密码需要输入2次。

提示用户名只能为字母、下划线和数字;密码不能超过8位,密码只能为数字或大小写字母

(2)注册成功后,账户密码记录在文件中 (user.txt)

内容格式可以为 姓名:密码

(3)用户名不能重复。输入用户名重复,需要提示用户重新输入。

--------------注册--------------
请输入用户名:abc
用户名已存在
请重新输入用户名:

(4)检测两次密码如果不同,提示两次密码不一致,

​ 检测两次密码如果相同,确认注册成功。

--------------注册--------------
请输入用户名:abc
请输入密码:123456
请再次输入密码:654321
密码不一致
请再次输入密码:

  • 登陆:

(1)用户登录时,进行三次校验,都不对,记录黑名单。

​ 黑名单保存在文件中:blacklist.txt

--------------登陆--------------
请输入用户名:abc
请输入密码:123456
密码不正确
请再次输入密码:654321
密码不正确
您还有1次机会
请再次输入密码:987654
密码3次错误,禁止登陆,请联系管理员。

(2)如果是黑名单的用户,则禁止再次登录

def register():
    print("注册".center(50, "-"))
    print("提示用户名只能为字母、下划线和数字;密码不能超过8位,密码只能为数字或大小写字母")
    f = open("user.txt", "a+", encoding="utf-8")
    f.seek(0)
    while True:
        count = 0
        userName = input("请输入用户名:")
        for i in list(userName):
            if i.isalnum() or i == "_":
                continue
            else:
                print("用户名只能为字母、下划线和数字")
                count += 1
                break

        for i in f.readlines():
            if userName == i.split(":")[0]:
                print("用户名已存在")
                count += 1
        if count == 0:
            break
    f.close()
    while True:
        passWord = input("请输入密码:")
        if len(passWord) < 9 and passWord.isalnum():
            passWord2 = input("请再次输入密码:")
        else:
            print("格式有误,请输入正确格式")
            print("密码不能超过8位,密码只能为数字或大小写字母")
            continue
        if passWord2 != passWord:
            print("密码不一致")
            print("请重新输入密码")
        else:
            print("注册成功")
            break
    f = open("user.txt", "a", encoding="utf-8")
    f.write(f"{userName}:{passWord}")
    f.write("\n")
    f.close()


def logon():
    list1 = []
    list2 = []
    listBlack = []
    f = open("user.txt", "r", encoding="utf-8")
    for i in f.readlines():
        list1.append(i.split(":")[0].replace("\n", ""))
        list2.append(i.split(":")[1].replace("\n", ""))
    f.close()
    f = open("blacklist.txt", "a+", encoding="utf-8")
    f.seek(0)
    print("登录".center(50, "-"))
    userName = input("请输入用户名:")
    for i in f.readlines():
        i = i.replace("\n", "")
        listBlack.append(i)
    if userName in listBlack:
        print("账号在黑名单中,请联系管理员")
    elif userName not in list1:
        print("找不到用户名,请检查用户名是否有误")
        print("或重新注册")
    else:
        count = 3
        while True:
            passWord = input("请输入密码:")
            if userName in list1:
                i = list1.index(userName)
                if passWord == list2[i]:
                    print("登录成功")
                    break
                else:
                    if count == 2:
                        count -= 1
                        print("密码错误,请重新输出密码")
                        print(f"您还有1机会")
                        continue
                    elif count == 1:
                        print("密码3次错误,禁止登陆,请联系管理员。")
                        f.write(userName)
                        f.write("\n")
                        break
                    else:
                        count -= 1
                        print("密码错误,请重新输出密码")
                        continue
            else:
                print(f"用户名{userName}不存在")
    f.close()


def main():
    while True:
        print("-" * 30)
        print("-" * 2, "操作编码", " " * 12, "操作", "-" * 2)
        print("-" * 2, "    [0]", " " * 12, "注册", "-" * 2)
        print("-" * 2, "    [1]", " " * 12, "登录", "-" * 2)
        print("-" * 2, "    [2]", " " * 12, "退出", "-" * 2)
        print("-" * 30)
        num = input("请输入你要进行的操作编码:")
        if num == "0":
            register()
        elif num == "1":
            logon()
        elif num == "2":
            break
        else:
            print("输出有误")


main()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值