Python如何实现字符串存在连续三次相同字符时返回False
问题分析
- 你原有代码的错误点:使用
password.count(char)统计的是字符在整个字符串里的全局出现次数,无法识别「连续重复」的场景,比如密码A1A2A3里A总共出现3次但不连续,会被你的代码误判为不符合规则。 - 顺便修正了你原有
password函数的逻辑错误:原有逻辑会导致「不满足大写、数字、特殊字符要求的密码反而返回True」的问题,修正后所有规则都满足才会返回True,符合常规密码校验逻辑。
修改方案
用最基础的索引遍历方式判断是否存在连续三个相同字符,不需要引入任何额外库,入门阶段的知识点就能实现:
def passwordlength(password: str): upper = digit = special = False for char in password: if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" : upper = True elif char in "1234567890": digit = True elif char in "$#@%!": special = True return upper and digit and special def password(password: str): # 校验基础规则:必须同时包含大写字母、数字、特殊字符 if not passwordlength(password): return False # 校验长度要求:7-11位 if not (6 < len(password) < 12): return False # 新增规则:校验是否存在连续三个相同的字符 # 从第3个字符(索引为2)开始遍历,每次对比当前字符和前两个字符 for i in range(2, len(password)): if password[i] == password[i-1] == password[i-2]: # 找到连续三个相同字符,直接返回不通过 return False # 所有规则都校验通过,返回通过 return True
实现说明
我们只需要从字符串的第三个字符开始,每次拿当前位置的字符和前两个位置的字符做全等对比即可:
- 如果三个字符完全相等,就说明出现了连续三次重复的情况,直接判定密码不合法
- 遍历完整个字符串都没有找到连续重复的情况,就说明符合所有规则
测试示例
password("Aab123#")返回True:所有规则都满足password("AAA123#")返回False:存在连续三个大写Apassword("Aa1113#")返回False:存在连续三个数字1password("Aa123##")返回False:存在连续三个特殊字符#password("ab123#$")返回False:没有大写字母password("Aa123456789#")返回False:长度超过11位
内容的提问来源于stack exchange,提问作者Joshua Bradley
相关产品推荐
相关产品推荐

