密码字符校验函数计数器异常及返回值错误问题求助
问题分析与解决方案
嘿,我一眼就瞅出你代码里的两个关键问题,这就是导致计数器不递增、返回结果错误的根源!
1. 计数器变量初始化位置错误
你把goodCha = 0和badCha = 0写在了for循环的内部——这意味着每次循环迭代时,这两个变量都会被重新重置为0!哪怕某次循环进入了正确分支让计数器加1,下一次循环一启动又变回0了,等于完全没统计到有效数据。
2. 冗余的计数逻辑(可选优化)
其实你根本不需要维护两个计数器,只要发现任何一个非法字符,直接返回False就够了,遍历完所有字符都合法再返回True,这样代码更高效也更简洁。
修正后的代码(基础版)
先把计数器移到循环外面,保证计数能正常累加:
def chaCheck2(password): # 把变量初始化放在循环外面,避免每次迭代重置 goodCha = 0 badCha = 0 # 直接遍历字符比用range+索引更直观 for char in password: char_code = ord(char) # 检查是否为数字或大小写字母 if (48 <= char_code <= 57) or (65 <= char_code <= 90) or (97 <= char_code <= 122): goodCha += 1 else: badCha += 1 # 只要存在非法字符就返回False,否则返回True return badCha == 0
更高效的精简版
不需要计数,遇到非法字符直接终止判断:
def chaCheck2(password): for char in password: char_code = ord(char) # 如果字符不是数字、大写字母、小写字母,直接返回False if not ((48 <= char_code <= 57) or (65 <= char_code <= 90) or (97 <= char_code <= 122)): return False # 所有字符都合法,返回True return True
Python内置方法一键解决
其实Python已经自带了完美符合你需求的方法:str.isalnum(),它会判断字符串是否仅包含字母和数字(且非空),一行代码就能搞定:
def chaCheck2(password): return password.isalnum()
注:
isalnum()对空字符串会返回False,如果你需要允许空字符串,可以额外加判断:return password == "" or password.isalnum()
内容的提问来源于stack exchange,提问作者Lacrosse343
相关产品推荐
相关产品推荐

