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

Sympy中parse_expr解析的表达式subs求值异常问题咨询

问题原因

你遇到的问题是因为parse_expr默认创建的是普通Symbol类型变量,而你直接写x | y时使用的是BooleanVar(布尔符号),两者属于不同的SymPy对象类型。当你用之前定义的BooleanVar变量传入subs()时,无法匹配parse_expr生成的Symbol变量,导致只有部分变量被替换,最终表达式简化为x。

解决方法

以下几种方式都能解决这个问题:

1. 使用字符串作为subs的键

直接通过变量名称字符串来替换,SymPy会自动匹配表达式中对应名称的变量:

exp = parse_expr('(y | x)')
result = exp.subs({'x': True, 'y': False})
print(result)  # 输出True

2. 传入预定义的布尔变量给parse_expr

提前定义BooleanVar类型的变量,通过local_dict参数告诉parse_expr使用这些变量,避免创建新的Symbol:

from sympy.logic.boolalg import BooleanVar
from sympy import parse_expr

x = BooleanVar('x')
y = BooleanVar('y')
exp = parse_expr('(y | x)', local_dict={'x': x, 'y': y})
result = exp.subs({x: True, y: False})
print(result)  # 输出True

3. 用simplify强制化简结果

如果已经得到未完全求值的表达式,可以用simplify()强制完成逻辑运算:

from sympy import parse_expr, simplify

exp = parse_expr('(y | x)')
result = simplify(exp.subs({'x': True, 'y': False}))
print(result)  # 输出True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:23:07