实现可将变量赋值序列推导为单一输出等式的脚本
多步变量赋值表达式展开脚本实现
你需要的功能可以通过如下方案快速实现,核心逻辑是按顺序递归替换所有变量,同时给替换的表达式套括号避免运算优先级混乱。
参考示例对照
输入内容:a=2+8,b=3+9,c=4+8,d=5+9,e=a+b,f=c+d,g=0+6,h=1+7,i=e*g,j=f+h,output=i+j
预期输出:output=(((2+8)+(3+9))*(0+6))+(((4+8)+(5+9))+(1+7))
实际运行代码后输出和预期完全匹配。
可直接运行的Python实现
def expand_expression(input_str): # 拆分所有赋值语句 assign_items = input_str.strip().split(',') var_pool = {} output_expr = "" for item in assign_items: key, value = item.split('=', 1) if key == "output": output_expr = value else: var_pool[key] = value # 递归替换所有变量 def recursive_replace(expr): # 按变量名长度倒序替换,避免短变量名先替换导致长变量名匹配错误 sorted_vars = sorted(var_pool.keys(), key=lambda x: -len(x)) for var in sorted_vars: if var in expr: expr = expr.replace(var, f"({var_pool[var]})") # 还有变量就继续递归 if any(var in expr for var in var_pool): return recursive_replace(expr) return expr final_expr = recursive_replace(output_expr) return f"output={final_expr}" # 测试用例 if __name__ == "__main__": test_input = "a=2+8,b=3+9,c=4+8,d=5+9,e=a+b,f=c+d,g=0+6,h=1+7,i=e*g,j=f+h,output=i+j" print(expand_expression(test_input))
逻辑说明
- 先解析输入的所有赋值语句,把自定义变量和对应表达式存入字典,单独提取出最终输出的表达式
- 递归替换过程中给每个替换的表达式外层套括号,完全保留原运算优先级,不会出现运算顺序错误
- 变量按长度倒序替换,兼容存在变量名包含关系的场景(比如同时有
a和aa两个变量) - 支持任意层数的变量嵌套引用,不需要手动指定替换顺序
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

