兲崆 2025-06-16 00:12 采纳率: 66.7%
浏览 6
已结题

python注册时密码强度检验失败


def register():
    while True:
        # 1.让用户输入用户名和密码
        print("\n注册")
        username = input("请输入用户名").strip()
        password = input("请输入密码").strip()
        re_password = input("请确认密码").strip()
        is_register = input("按任意键确认/n退出").strip().lower()
        # 2.进行简单的逻辑判断
        # 2.1 判断用户是否要退出
        if is_register == "n":
            break
        # 2.2 判断两次输入的密码是否一致
        if password != re_password:
            print("\n两次输入的密码不一致")
            continue
        import re
        # 2.3 检验用户名是否合法
        if not re.findall('^[a-zA-Z]\w{2,9}$', username):
            print('\n用户名长度必须为3-10个字符\n只能使用字母,数字和下划线组成,并只能以字母开头')
        continue
        #  2.4 检验密码强度
        if not re.findall('^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,16}$', password):
            print('\n密码太弱,必须包含大写字母,小写字母和数字,\n并且长度必须为8-16位')
        continue

  • 写回答

5条回答 默认 最新

  • 檀越@新空间 2025-06-16 00:13
    关注

    上午好☀️☀️☀️️
    本答案参考通义千问

    从你的代码中可以看出,你已经尝试实现了一个简单的注册功能,并且加入了对用户名和密码的基本校验逻辑。然而,你的密码强度校验部分存在问题,导致无法正确检测密码强度。以下是问题分析和解决方案。


    问题分析

    1. continue 的误用

      • if not re.findall(...) 条件下,你使用了 continue,但 continue 是用于循环体内的语句,表示跳过当前迭代并继续下一次循环。在这里,它会导致程序直接跳过后续逻辑,而不会提示用户重新输入密码。
    2. 逻辑错误

      • 在密码强度校验部分,如果密码不符合要求,应该提示用户重新输入密码,而不是直接跳过。
    3. 缺少明确的错误提示

      • 当前代码在密码强度校验失败时,只打印了一条提示信息,但没有让用户有机会重新输入密码。

    解决方案

    为了修复这些问题,我们需要调整逻辑,确保在密码强度校验失败时能够提示用户重新输入密码,并且避免使用 continue 错误地中断流程。以下是改进后的代码:

    def register():
        while True:
            # 1. 让用户输入用户名和密码
            print("\n注册")
            username = input("请输入用户名: ").strip()
            password = input("请输入密码: ").strip()
            re_password = input("请确认密码: ").strip()
    
            # 2. 进行简单的逻辑判断
            # 2.1 判断用户是否要退出
            is_register = input("按任意键继续注册,输入 'n' 退出: ").strip().lower()
            if is_register == "n":
                break
    
            # 2.2 判断两次输入的密码是否一致
            if password != re_password:
                print("\n两次输入的密码不一致,请重新注册!")
                continue
    
            # 2.3 检验用户名是否合法
            import re
            if not re.match(r'^[a-zA-Z]\w{2,9}$', username):
                print('\n用户名长度必须为3-10个字符\n只能使用字母、数字和下划线组成,并只能以字母开头')
                continue
    
            # 2.4 检验密码强度
            if not re.match(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,16}$', password):
                print('\n密码太弱,必须包含大写字母、小写字母和数字,并且长度必须为8-16位')
                continue
    
            # 如果所有校验都通过,则注册成功
            print("\n注册成功!")
            break
    

    代码改进点

    1. 移除错误的 continue

      • continue 替换为 if 嵌套结构,确保只有在满足条件时才执行跳过逻辑。
    2. 增加退出选项

      • 在输入 n 时,允许用户退出注册流程。
    3. 增强提示信息

      • 提供更清晰的提示信息,告知用户具体需要满足的规则。
    4. 使用 re.match 而非 re.findall

      • re.findall 返回的是匹配结果的列表,而 re.match 更适合用来检查整个字符串是否符合正则表达式。

    运行示例

    假设用户输入如下内容:

    注册
    请输入用户名: user123
    请输入密码: Pass1234
    请确认密码: Pass1234
    按任意键继续注册,输入 'n' 退出: y
    
    注册成功!
    

    如果用户输入的密码不符合要求:

    注册
    请输入用户名: user123
    请输入密码: pass
    请确认密码: pass
    按任意键继续注册,输入 'n' 退出: y
    
    密码太弱,必须包含大写字母、小写字母和数字,并且长度必须为8-16位
    

    这样,代码就能正确处理各种情况,并引导用户完成注册流程。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 创建了问题 6月16日