You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化含三个未知条件的多分支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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:45:38