如何优化含三个未知条件的多分支if语句?附密码生成代码优化需求
密码生成代码优化方案
一、解决if语句冗余问题
原代码通过枚举所有选项组合来生成正则模式,导致分支过多、代码冗余。核心优化思路是动态构建正则字符集,根据用户选择的选项逐步扩展字符范围,无需枚举所有组合:
import exrex # 获取并处理输入 try: len_pwd = int(input('Length of the password : ')) upc = bool(int(input('Upper case ? (0 = No ; 1 = Yes) : '))) nbr = bool(int(input('Numbers ? (0 = No ; 1 = Yes) : '))) spe = bool(int(input('Special char ? (0 = No ; 1 = Yes) : '))) except ValueError: print("Please enter valid numbers (0 or 1) for options.") exit() # 动态构建正则字符集 char_groups = [] # 基础字符:小写字母 char_groups.append('[a-z]') # 根据选项添加对应字符组 if upc: char_groups.append('[A-Z]') if nbr: char_groups.append('\d') if spe: # 包含双引号和其他特殊字符,用单引号包裹避免转义问题 char_groups.append('["_$.+-/*=]') # 处理全选No的情况 if not char_groups: print("Don't bother me.") else: # 合并字符组为完整正则模式 full_pattern = ''.join(char_groups) # 生成密码:用生成器表达式join,比循环拼接字符串高效 pwd = ''.join(exrex.getone(full_pattern) for _ in range(len_pwd)) print(pwd)
二、其他优化点
- 输入验证:添加
try-except捕获用户输入非数字的情况,避免程序直接崩溃。 - 布尔值转换:将
upc/nbr/spe转为布尔值,后续判断逻辑更直观,无需写not nbr这类表达式。 - 字符串拼接优化:用
join()替代循环拼接字符串,减少内存中临时字符串的生成,提升效率。 - 移除无用依赖:原代码导入了
random和re但未使用,直接删除即可。 - 正则字符集修正:原代码中的
"是HTML转义的双引号,直接替换为"并使用单引号包裹正则字符串,避免转义混乱。 - 提前终止逻辑:在构建字符集后直接判断是否全选No,无需进入循环后再检查,减少无效执行。
内容的提问来源于stack exchange,提问作者Damien Daubricourt
相关产品推荐
相关产品推荐

