-夏日清风- 2023-08-19 23:38 采纳率: 100%
浏览 13
已结题

疑问-Python程序(注册登录程序)

问题写在代码第一行(第一段代码后有更新),懂的程序员能看一下吗(有点费眼)?

#修复bug:加入黑名单的用户名仍能执行登录程序【代码登录流程部分(66-101行)】
def inital_page():
    print("*"*30)
    print("编码\t操作")
    print("1\t注册")
    print("2\t登录")
    print("3\t退出")
    print("*"*30)
     
def register_page():
    print("注册".center(30,'-'))
    print("提示:用户名只能包含数字、字母以及'_'")
    #用户名注册
    while True:
        out = 0
        username = input("请输入用户名:")
            #判断用户名是否存在
        f = open("userlist.txt","a+",encoding="utf-8") #如有非数字以及文字字符,一定要加encoding = "……",否则将默认以编码解码,导致报错
        f.seek(0)
        data = f.readlines()
        for user in data:
            if username == user.split(":")[0]:
                print("用户名已存在,请重新输入") 
                out += 1                      
            else:
                continue
        #判断用户名是否符合规范
        for i in list(username):
            if i.isalnum() or i == "_":
                continue
            else:
                print("【用户名只能为字母、下划线和数字!】")
                out = out + 1
                break

        #退出该流程
        if out == 0:
            break
        
    #密码注册
    while True:
        out = 0
        password = input("请输入密码:")
        if not(password.isalnum() and len(password) <= 8):
            print("【密码只能为数字、字母以及8个字符】")
            out = out + 1
            
            
        else:
            password2 = input("请再次输入密码:")
            if password2 != password:
                print("两次密码不一致")
                out += 1
                continue  
            else:
                print("注册成功!")
                break
        if out == 0:
            break
       
    #储存用户名和密码到文件中
    f = open("userlist.txt","a+",encoding='utf-8')
    f.write(f"{username}:{password}"+'\n')
    f.close()
    
#登录流程          
def login_page():
    name = []
    key = []

    print("登录".center(30,'-'))   
    g = open("blacklist.txt","a+",encoding='utf-8') 
    f = open("userlist.txt","r",encoding='utf-8')
    f.seek(0)
    word = f.readlines()
    for line in word:
        name.append(line.split(":")[0].replace("\n",""))
        key.append(line.split(":")[1].replace("\n",""))
    username1 =input("请输入您的用户名:")
    if username1 not in name:
        print("用户名不存在,请重新输入!")
    else:
        times = 3
        while True:
            password1 = input("请输入您的密码:")     
            if password1 == key[name.index(username1)]:
                        print("登陆成功")
                        break
            else:
                if times == 2:
                    times -= 1
                    print(f"密码错误,请重新输入密码,您还有{times}次机会")
                    continue
                elif times == 1:
                        print("您的账号已被锁定,请稍后重试")
                        g.write(username1 + '\n')
                        break
                else:
                    times -= 1
                    print(f"密码错误,请重新输入密码")
                               
def program_test():
    while True: 
        inital_page()
        oper_code = input("请输入您所需操作的对应编号(1、2、3):")
        if oper_code == "1":
            register_page()
        elif oper_code == "2":
            login_page()
        elif oper_code == "3":
            exit()
        else:
            print("输入错误,请重新输入!")            
program_test()

后在79行和80行之间插入了以下代码,仍然没有达到效果*,想问一下怎么修改才能达到效果呢?
效果:登录流程中,用户输入用户名后,如用户为黑名单中的用户,则提示“账户已锁定”

 forbid_users = g.readlines()
    print(forbid_users)
    for user in forbid_users:
        if username1 == user.replace("\n",""):
            print("您的账号已被锁定,请联系管理员")
            break
  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-21 01:07
    关注

    【以下回答由 GPT 生成】

    问题分析

    根据代码,目前的登录流程没有判断用户是否在黑名单中,导致黑名单用户仍能执行登录程序。为了修复这个bug,我们需要在登录前先判断用户是否在黑名单中,如果用户在黑名单中,则不允许登录。

    解决方案

    修复这个bug的具体步骤如下:

    1. 在登录前,先判断用户是否在黑名单中。我们可以在register_page函数外部,添加一个load_blacklist函数,用于加载黑名单信息。
    2. 修改登录流程部分的代码,在用户输入用户名后,先判断用户名是否在黑名单中。如果在黑名单中,则提示用户该用户已被禁止登录。
    3. 将修复后的代码进行测试,确保黑名单用户无法登录。

    下面是修改后的代码:

    # 加载黑名单信息
    def load_blacklist():
        f = open("blacklist.txt", "a+", encoding="utf-8")
        f.seek(0)
        blacklist = f.readlines()
        f.close()
        return [user.strip() for user in blacklist]
    
    def register_page():
        print("注册".center(30, '-'))
        print("提示: 用户名只能包含数字、字母以及下划线")
    
        # 加载黑名单信息
        blacklist = load_blacklist()
    
        # 用户名注册
        while True:
            out = 0
            username = input("请输入用户名:")
    
            # 判断用户名是否在黑名单中
            if username in blacklist:
                print("该用户已被禁止登录")
                continue
    
            # 判断用户名是否存在
            f = open("userlist.txt", "a+", encoding="utf-8")
            f.seek(0)
            data = f.readlines()
            for user in data:
                if username == user.split(":")[0]:
                    print("用户名已存在,请重新输入")
                    out += 1                      
                else:
                    continue
    
            # 判断用户名是否符合规范
            for i in list(username):
                if i.isalnum() or i == "_":
                    continue
                else:
                    print("【用户名只能为字母、下划线和数字!】")
                    out += 1
                    break
    
            # 退出该流程
            if out == 0:
                break
    
        # 其他注册流程...
    

    修复后的代码中,我们添加了一个load_blacklist函数来加载黑名单信息,使用列表blacklist保存黑名单中的用户名。在用户名注册部分的代码中,先判断用户输入的用户名是否在黑名单中,如果在,则提示用户该用户已被禁止登录,并重新进入用户名的输入环节。

    请注意,这里假设黑名单的用户名信息存储在一个名为blacklist.txt的文件中,每行一个用户名。

    测试

    为了测试修复后的代码,我们可以按照以下步骤进行操作:

    1. 创建一个名为blacklist.txt的文本文件,并在其中添加一些黑名单的用户名,每行一个用户名。
    2. 运行修复后的代码,验证在登录时输入黑名单中的用户名是否会被禁止登录。

    如果在登录时输入黑名单中的用户名,应该会得到一个提示,说明已被禁止登录。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月6日
  • 已采纳回答 8月29日
  • 修改了问题 8月20日
  • 修改了问题 8月20日
  • 展开全部

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题