使用 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
变量中。
我正在尝试通过 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
变量中。