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

Python密码校验如何实现连续3次相同字符出现则返回False?

密码校验代码问题诊断与修复方案

现有代码的核心问题

你编写的校验逻辑存在两个本质错误,完全无法匹配需求:

  • password.count(char) > 3 统计的是字符在整个密码中的总出现次数,不是连续出现次数,比如密码A1A!A2里A总共出现3次但不连续,会被你误判为不合法;反过来密码AAA1b!里A连续出现3次,但总次数等于3不会触发你的判断条件,会被误判为合法
  • 阈值设置错误:需求是连续出现3次就返回False,你的判断条件是>3,需要总出现4次才会触发,逻辑本身就和要求相悖

修复后完整代码

def passwordlength(password: str):
    upper = digit = special = False
    for char in password:
        # 这里用内置方法替代手写字符串,更简洁不易出错
        if char.isupper():
            upper = True
        elif char.isdigit():
            digit = True
        elif char in "$#@%!":
            special = True
    return upper and digit and special

def passwordOK(password: str):
    # 先校验原有基础规则
    if not passwordlength(password):
        return False
    if not (6 < len(password) < 12):
        return False
    # 新增连续相同字符校验逻辑
    consecutive_count = 1
    for i in range(1, len(password)):
        if password[i] == password[i-1]:
            consecutive_count += 1
            # 连续相同字符达到3次直接返回不合法
            if consecutive_count >= 3:
                return False
        else:
            # 字符不同就重置连续计数
            consecutive_count = 1
    return True

验证效果

  • 输入AAA123!a:存在连续3个A,返回False,符合预期
  • 输入A1A2A3!b:A总出现3次但不连续,返回True,符合预期
  • 输入Ab123!!c:所有字符连续次数都不超过2,返回True,符合预期

内容的提问来源于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.25 01:36:04