我正在尝试通过Sympy将字符串转换为表达式,如下所示:
profit = "((MaxSalesCapacity * PctStoreUtilizationRate) * AvgSaleSize) - ((TotalRevenues * AvgCostGoods) + FixedCosts)"
eqn = sympify(profit)
然后我测试是查看它是否有效,这是我得到的:
print(eqn)
−𝐴𝑣𝑔𝐶𝑜𝑠𝑡𝐺𝑜𝑜𝑑𝑠𝑇𝑜𝑡𝑎𝑙𝑅𝑒𝑣𝑒𝑛𝑢𝑒𝑠+𝐴𝑣𝑔𝑆𝑎𝑙𝑒𝑆𝑖𝑧𝑒𝑀𝑎𝑥𝑆𝑎𝑙𝑒𝑠𝐶𝑎𝑝𝑎𝑐𝑖𝑡𝑦𝑃𝑐𝑡𝑆𝑡𝑜𝑟𝑒𝑈𝑡𝑖𝑙𝑖𝑧𝑎𝑡𝑖𝑜𝑛𝑅𝑎𝑡𝑒−𝐹𝑖𝑥𝑒𝑑𝐶𝑜𝑠𝑡𝑠
但是,当我尝试替换值时,如下所示:eqn.subs(TotalRevenues, 100)
,出现此错误:
NameError:名称'TotalRevenues'尚未定义
我在这里做错了什么?任何建议将不胜感激。
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
变量中。