使用 Sympify() 将字符串转换为表达式后无法替换值

Cannot substitute values after converting string to expression with Sympify()

我正在尝试通过 Sympy 将字符串转换为表达式,如下所示:

profit = "((MaxSalesCapacity * PctStoreUtilizationRate) * AvgSaleSize) - ((TotalRevenues * AvgCostGoods) + FixedCosts)"
eqn = sympify(profit)

然后我测试是看是否有效,这是我得到的:

print(eqn)
−+−

但是,当我尝试替换值时,如下所示:eqn.subs(TotalRevenues, 100),我收到此错误:

NameError: name 'TotalRevenues' 未定义

我在这里做错了什么?任何建议将不胜感激。

这与您的任何 API 通话无关。 TotalRevenues - 您传递给 eqn.subs 的标识符从未在 Python 程序中定义。您确实将该名称的符号定义为传递给 sympify 的表达式的一部分,但这不会导致创建 Python 标识符。传递给进一步的 API 调用时,您需要将 SymPy 符号的名称放在引号中。完整代码如下所示:

from sympy import sympify

profit = "((MaxSalesCapacity * PctStoreUtilizationRate) * AvgSaleSize) - ((TotalRevenues * AvgCostGoods) + FixedCosts)"
eqn = sympify(profit)
print(eqn)
seqn = eqn.subs("TotalRevenues", 100)
print(seqn)

输出 wpoi 应该像我期望的那样:

-AvgCostGoods*TotalRevenues + AvgSaleSize*MaxSalesCapacity*PctStoreUtilizationRate - FixedCosts
-100*AvgCostGoods + AvgSaleSize*MaxSalesCapacity*PctStoreUtilizationRate - FixedCosts

另请注意,subs() 方法不会改变它调用的对象,而是 returns 一个新对象,并对其应用替换。我将其存储在 seqn 变量中。