Python中如何替代多分支IF语句简化重复逻辑代码?
精简多分支IF语句的优化方案
你这段代码里的多分支IF重复逻辑太多了,可以通过字典映射操作来大幅精简代码,同时还能优化全局变量、字符串拼接等问题。以下是优化后的版本:
def calculate_and_print(num1, num2, op): # 定义操作映射:键是输入数字,值是(运算函数, 运算符符号) operations = { 1: (lambda a, b: a + b, "+"), 2: (lambda a, b: a - b, "-"), 3: (lambda a, b: a * b, "*"), 4: (lambda a, b: a / b, "/") } if op not in operations: print("只能输入1-4之间的数字") return False func, symbol = operations[op] answer = func(num1, num2) # 用f-string简化字符串拼接 print(f"{num1} {symbol} {num2} = {answer}") return True def math_stuff(num1, num2): while True: try: op = int(input("1 for +, 2 for -, 3 for *, 4 for /")) if calculate_and_print(num1, num2, op): break except ValueError: print("请输入数字") # 假设Number1和Number2是预先定义好的数值 Number1 = 10 Number2 = 5 math_stuff(Number1, Number2)
关键优化点:
- 字典映射替代多分支IF:把每个操作对应的运算逻辑和符号存入字典,通过输入的数字直接索引,消除重复的elif代码块。
- 移除全局变量:将需要传递的参数(num1、num2、操作符)通过函数参数传递,避免全局变量带来的代码耦合问题。
- 简化字符串输出:使用Python的f-string格式化输出,比手动拼接字符串更简洁易读。
- 循环替代递归:原代码用递归处理输入错误,改成while循环更安全,避免递归深度过大导致栈溢出。
- 拆分功能函数:把计算和打印逻辑拆分成单独的
calculate_and_print函数,职责更单一,代码更易维护。
如果需要保留原有的StringAll函数逻辑,也可以调整字典映射的方式,但全局变量还是建议尽量避免使用。
内容的提问来源于stack exchange,提问作者Kitty Summoner
相关产品推荐
相关产品推荐

