如何优化初学者编写的Python密码检查器代码,使其更整洁高效?
密码检查器代码优化建议
这里是重构后的代码,完全满足你封装函数、放入main函数的需求,同时代码更整洁高效:
import re def is_valid_password(password: str) -> bool: # 用原始字符串定义正则,避免转义字符混乱 SPECIAL_CHARS = re.compile(r'[@_!#$%^&*()<>?/\|}{~:]') # 检查长度不达标直接返回 if not (5 <= len(password) <= 10): print("密码长度必须在5到10个字符之间") return False # 检查无特殊字符直接返回 if not SPECIAL_CHARS.search(password): print("密码需要包含至少一个特殊字符") return False # 检查无大写字母直接返回 if not any(char.isupper() for char in password): print("密码需要包含至少一个大写字母") return False print("密码验证通过") return True def main(): while True: pw = input("请输入密码: ") if is_valid_password(pw): break if __name__ == "__main__": main()
具体优化点说明
- 扁平化条件逻辑:删掉原代码多层嵌套的
if-else,每个检查不通过直接return False,逻辑更直观,读起来不用反复嵌套跳转。 - 拆分职责:
is_valid_password只负责密码规则验证,main处理输入循环,后续修改规则或输入逻辑时互不干扰,符合代码设计的单一职责原则。 - 正则写法优化:用原始字符串
r''定义正则,避免转义符的额外处理;把正则编译放在函数内作为常量,既避免全局变量污染,也不会影响执行效率(函数内常量只会初始化一次)。 - 修正提示表述:把原代码里模糊的英文提示改成准确的中文,用户能立刻明白问题出在哪。
- 添加类型提示:给函数参数和返回值标注类型,后续维护时能快速清楚函数的输入输出要求。
额外可扩展优化方案
如果想让验证函数更通用(比如后续适配GUI或接口场景),可以把提示信息和验证结果分离,让函数只返回验证状态和错误说明:
def is_valid_password(password: str) -> tuple[bool, str]: SPECIAL_CHARS = re.compile(r'[@_!#$%^&*()<>?/\|}{~:]') if not (5 <= len(password) <= 10): return False, "密码长度必须在5到10个字符之间" if not SPECIAL_CHARS.search(password): return False, "密码需要包含至少一个特殊字符" if not any(char.isupper() for char in password): return False, "密码需要包含至少一个大写字母" return True, "密码验证通过" def main(): while True: pw = input("请输入密码: ") valid, message = is_valid_password(pw) print(message) if valid: break
内容的提问来源于stack exchange,提问作者Big_Port
相关产品推荐
相关产品推荐

