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

Python初学者如何简化堆叠的if/else语句实现代码精简

堆叠if/else的简化方法:以热门姓名查询代码为例

你代码里if/else堆得冗长的核心原因是大量重复逻辑写了多遍,只要把重复部分抽离、用合适的数据结构代替分支判断,代码能缩短一半以上,还能顺便修掉原代码里的bug(比如输入非boy/girl/both内容时会触发变量未定义报错)。

原代码三个查询分支的逻辑几乎完全一致:提示输入名字、判断是否在对应名单、打印结果,只是执行次数、匹配的名单和提示语有区别,完全没必要每个分支重写一遍逻辑。

优化后完整代码

def check_name(name_type_cn: str, name_list: list[str]) -> None:
    """封装单次姓名查询的通用逻辑,避免重复写输入、判断、打印代码"""
    selection = input(f"请输入一个{name_type_cn}名字:")
    status = "是" if selection in name_list else "不是"
    print(f"{selection}{status}2000-2009年间受欢迎的{name_type_cn}名字。")

def main():
    # 用with上下文管理器处理文件,自动完成关闭操作,不用手动写close()
    with open('BoyNames.txt', 'r', encoding='utf-8') as f:
        boy_names = f.read().splitlines()
    with open('GirlNames.txt', 'r', encoding='utf-8') as f:
        girl_names = f.read().splitlines()

    choice = input("请输入查询类型,可选'boy'(男孩)、'girl'(女孩)、'both'(两者都查):").strip().lower()
    # 用字典做分支映射,替代多层if/elif判断
    task_map = {
        'boy': [('男孩', boy_names)],
        'girl': [('女孩', girl_names)],
        'both': [('男孩', boy_names), ('女孩', girl_names)]
    }

    # 提前拦截非法输入,不合法直接退出,后续逻辑不用再做输入合法性判断
    if choice not in task_map:
        print("输入无效,请重新运行程序并输入boy、girl、both三者之一")
        return

    # 遍历当前选项对应的任务列表执行即可,不需要额外写分支
    for name_type, name_list in task_map[choice]:
        check_name(name_type, name_list)

if __name__ == "__main__":
    main()

几个可复用的减if/else技巧

  • 抽重复逻辑到函数:只要发现不同分支里有3行以上结构、逻辑几乎一致的代码,就可以把这部分抽成独立函数,不同分支传不同参数调用即可,这是减代码量最直接的方法。
  • 字典映射替代等值判断分支:遇到一连串if 变量==值1/elif 变量==值2/elif 变量==值3的分支,直接把判断值当key,对应要执行的逻辑、要用到的参数当value存进字典,直接按key取值执行,分支越多这种写法优势越大。
  • 提前返回减少嵌套:把非法输入、边界条件的判断放在最前面,不符合条件直接return/抛出错误,后面的核心逻辑就不用嵌套在多层if里,代码可读性会高很多。
  • 三元表达式简化二选一输出:类似“满足条件打印A,不满足打印B”的场景,用值1 if 条件 else 值2的三元表达式就能代替一整个if/else块。

内容的提问来源于stack exchange,提问作者mugen gyutaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:48:16