[用Sympify()将字符串转换为表达式后不能替换值

问题描述 投票:0回答:1

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

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

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

print(eqn)
−𝐴𝑣𝑔𝐶𝑜𝑠𝑡𝐺𝑜𝑜𝑑𝑠𝑇𝑜𝑡𝑎𝑙𝑅𝑒𝑣𝑒𝑛𝑢𝑒𝑠+𝐴𝑣𝑔𝑆𝑎𝑙𝑒𝑆𝑖𝑧𝑒𝑀𝑎𝑥𝑆𝑎𝑙𝑒𝑠𝐶𝑎𝑝𝑎𝑐𝑖𝑡𝑦𝑃𝑐𝑡𝑆𝑡𝑜𝑟𝑒𝑈𝑡𝑖𝑙𝑖𝑧𝑎𝑡𝑖𝑜𝑛𝑅𝑎𝑡𝑒−𝐹𝑖𝑥𝑒𝑑𝐶𝑜𝑠𝑡𝑠

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

NameError:名称'TotalRevenues'尚未定义

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

python python-3.x sympy symbolic-math
1个回答
0
投票
这与您的任何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()方法不会使调用它的对象发生突变,而是返回一个新对象,并对其应用替换。我将其存储在seqn变量中。
© www.soinside.com 2019 - 2024. All rights reserved.