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
相关产品推荐
相关产品推荐

