You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:多规则密码校验while循环运行异常及else语句无效问题

基于while循环的多规则密码校验实现

原代码核心问题定位

  • 混淆函数本身与函数调用结果:判断循环条件时写chk_minlength == False,此处chk_minlength是定义的校验函数对象,不是函数执行后返回的布尔值,函数对象永远不可能等于布尔值False,导致while循环从启动条件上就无法正常执行。正确写法需要调用函数(即加括号写成chk_minlength() == False)并存储返回值供后续判断
  • 校验结果未同步更新:原来的校验函数直接依赖外层作用域的password变量,每次循环获取用户新输入的密码后,没有重新调用校验函数计算最新结果,后续判断始终沿用第一次输入对应的旧结果,无法响应新的输入内容
  • 初始校验结果未落地:原代码单独调用了所有校验函数,但没有把函数返回的布尔值存储为变量供后续判断使用
  • 提示语存在表意遗漏:原代码中“密码不能包含空格”的提示漏写了核心动词,会出现语义不通的问题
  • else语句失效的根源:while循环的判断条件从一开始就不成立,循环体根本不会被执行,嵌套在循环内的所有分支判断自然无法触发

可正常运行的参考实现

保留你原本的代码结构,仅修正逻辑错误,方便对照理解差异:

def chk_password():
    # 输出密码规则说明
    print('\n\n请设置新密码')
    print('密码长度要求为6-15位')
    print('密码不能包含任意大小写形式的"umgc"字符组合')
    print('密码不能包含空格')
    print('密码必须包含"*"字符\n')

    while True:
        password = input('\n请输入你的密码:\n')

        # 定义校验逻辑,接收传入的密码字符串作为参数
        def chk_minlength(pwd):
            return len(pwd) >= 6
        def chk_maxlength(pwd):
            return len(pwd) <= 15
        def chk_spaces(pwd):
            return ' ' not in pwd
        def chk_specchar(pwd):
            return '*' in pwd
        def chk_umgc(pwd):
            return 'umgc' not in pwd.lower()

        # 每次输入后立刻调用所有校验函数,存储当前输入对应的校验结果
        min_len_pass = chk_minlength(password)
        max_len_pass = chk_maxlength(password)
        no_space_pass = chk_spaces(password)
        has_star_pass = chk_specchar(password)
        no_umgc_pass = chk_umgc(password)

        # 所有规则通过时终止循环
        if min_len_pass and max_len_pass and no_space_pass and has_star_pass and no_umgc_pass:
            print('密码已符合所有设置规则,感谢配合。')
            break

        # 逐条提示不通过的规则,引导用户修正
        print('密码不符合要求,请对照以下问题修正:')
        if not min_len_pass:
            print('密码长度不能少于6位')
        if not max_len_pass:
            print('密码长度不能超过15位')
        if not no_space_pass:
            print('密码中不能包含空格')
        if not has_star_pass:
            print('密码必须包含"*"字符')
        if not no_umgc_pass:
            print('密码不能包含任意大小写组合的"umgc"字符串')

chk_password()

内容的提问来源于stack exchange,提问作者Mr. T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 22:24:04