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

Python编写的密码校验函数无法正常运行,该如何排查修正错误?

错误梳理

1. passwordlength 函数错误

  • 大写判断条件逻辑冗余错误:原判断char in "大写串" and "数字串" and "小写串"等价于仅判断字符是否为大写,多余的and后内容无实际作用,属于书写失误。
  • 缺失小写校验逻辑(根据你条件里书写的小写串推测,你本来需要密码同时包含小写字母),原函数未定义小写对应的标记变量和判断逻辑。
  • 提前返回逻辑有隐患:遍历到满足三个标记的位置就直接返回,若后续要追加其他单字符校验会直接失效,建议遍历完全部字符后再统一返回结果。

2. passwordOK 函数错误

  • 长度校验规则错误且逻辑顺序混乱:原要求是6到12位,你写的是>6且<12,漏掉了长度等于6、12的合法场景;且长度校验通过后直接返回True,完全没有执行后续的字符重复次数校验。
  • 字符重复校验逻辑完全写反:原要求是所有字符出现次数都小于3,你写的是只要有任意一个字符出现次数<=3就直接返回True,哪怕有其他字符出现次数超标也不会被检测到。
  • 重复调用passwordlength函数,多余消耗性能,可直接复用一次调用的结果。

修正后完整代码

def passwordlength(password: str):
    # 定义四个标记分别对应大写、小写、数字、特殊字符是否存在
    upper = lower = digit = special = False
    for char in password:
        if char.isupper():
            upper = True
        elif char.islower():
            lower = True
        elif char.isdigit():
            digit = True
        elif char in "$#@%!":
            special = True
    # 所有基础规则都满足才返回True
    return upper and lower and digit and special

def passwordOK(password: str):
    # 1. 先校验基础规则
    if not passwordlength(password):
        return False
    # 2. 校验长度在6-12之间(包含边界)
    if not (6 <= len(password) <= 12):
        return False
    # 3. 校验所有字符出现次数都小于3,用set去重减少重复计算
    for char in set(password):
        if password.count(char) >= 3:
            return False
    # 全部校验通过返回True
    return True

# 测试用例
print(passwordOK(password='aaaa1jd4kjfs$jDhfksfd'))

上述测试用例执行结果为False,符合预期:该密码长度远超12位,且字符a出现次数大于2。

规则调整说明

如果你的基础校验规则不需要包含小写字母,删除passwordlength里的lower相关判断逻辑即可。

内容的提问来源于stack exchange,提问作者Joshua Bradley

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:54:05