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

Python密码校验代码检测特殊字符与数字的逻辑错误排查

密码强度校验代码问题排查

现存问题

  • 大小写校验逻辑错误:passWord is not passWord.isupper() and not passWord.islower() 写法完全不符合逻辑,isupper()/islower()返回的是布尔值,字符串和布尔值做is not比较永远返回True,无法正确判断是否同时包含大小写。正确逻辑应为判断既不是全大写、也不是全小写:not passWord.isupper() and not passWord.islower()。
  • 数字存在性判断错误:any(passWord.isdigit) 没有调用isdigit()方法,直接传入方法名会被any判定为真值,永远返回True。正确写法为遍历每个字符判断:any(c.isdigit() for c in passWord)。
  • 特殊字符匹配判断错误:special_chars.search(passWord) >= 1 不符合re模块的返回规则,search()方法匹配成功返回匹配对象、失败返回None,不能和数字做比较,正确写法为special_chars.search(passWord) is not None。
  • 逻辑分支混乱:基础校验(长度、大小写)不通过的情况下,后续强度判断逻辑仍会执行,输出不符合预期的强度提示。
  • 强度输出逻辑冲突:当前如果满足强密码条件,会先连续输出两次中等强度提示,再输出强密码提示,需要调整为互斥的分支判断,优先判定强密码,再判定中等强度。

修正后完整代码

import re

print("你的密码必须同时包含大小写字母,可搭配数字、特殊字符,长度至少8位")
passWord = input("请输入密码:")
special_chars = re.compile('[@_!#$%^&*()<>?/\|}{~:]')

# 先做基础规则校验
valid = True
if len(passWord) < 8:
    print("密码长度不足8位")
    valid = False
if passWord.isupper() or passWord.islower():
    print("密码需要同时包含大小写字母")
    valid = False

if not valid:
    print("操作错误,请遵守上方给出的密码规则")
else:
    # 校验两次密码一致性
    passWord2 = input("请再次输入密码:")
    if passWord2 != passWord:
        print("两次输入的密码不一致,请重试")
    else:
        print("密码格式有效")
        # 判定密码强度
        has_digit = any(c.isdigit() for c in passWord)
        has_special = special_chars.search(passWord) is not None
        if has_digit and has_special:
            print("你的密码强度为强")
        elif has_digit or has_special:
            print("你的密码强度为中等")

内容的提问来源于stack exchange,提问作者My Names

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:27:00