Python密码校验函数_isValid()输出异常问题排查求助
密码验证函数
_isValid()的问题排查与修复 核心问题分析
你的代码存在两个关键问题,导致无法正确验证密码:
非字母数字字符的判断逻辑完全颠倒
原代码中判断非字母数字字符的条件写为elif c.isalnum(),但实际需求是检查字符不是字母数字(如!@#$这类符号),此条件完全反向,导致check5永远无法被设为True。同时对应的注释也标注错误,check5应为“非字母数字字符”检查,而非字母数字检查。条件分支的
elif链式结构存在潜在风险
虽然单个字符不可能同时是数字、大写字母、小写字母,但使用elif会让每个字符只能触发一个条件判断,后续若新增字符类型检查,容易出现逻辑漏判的情况。
修正后的代码
import stdio import sys # Entry point def main(): pwd = sys.argv[1] stdio.writeln(_isValid(pwd)) # Returns True if pwd is a valid password, and False otherwise. def _isValid(pwd): check1 = False # 长度至少8位 check2 = False # 包含至少一个数字 check3 = False # 包含至少一个大写字母 check4 = False # 包含至少一个小写字母 check5 = False # 包含至少一个非字母数字字符 # 检查密码长度 if len(pwd) >= 8: check1 = True for c in pwd: if c.isdigit(): check2 = True if c.isupper(): check3 = True if c.islower(): check4 = True if not c.isalnum(): check5 = True # 所有条件满足时返回True,否则返回False return check1 and check2 and check3 and check4 and check5 if __name__ == '__main__': main()
修正说明
- 修正
check5的判断条件为not c.isalnum(),正确识别非字母数字字符 - 将所有条件分支改为独立的
if语句,逻辑更清晰,避免分支互斥导致的潜在问题 - 简化返回逻辑,直接返回布尔表达式结果,无需额外的
if-else嵌套 - 修正注释内容,使其准确对应每个检查项的功能
内容的提问来源于stack exchange,提问作者Fab
相关产品推荐
相关产品推荐

