如何使符号的用户输入不区分大小写

时间:2019-10-06 10:55:46

标签: python sympy

我想避免在我制作的 scypy 基本脚本中出现 caps lock 错误。  该脚本计算偏导数

from sympy import *
from sympy.parsing.sympy_parser import parse_expr
from sympy.parsing.sympy_parser import standard_transformations, \
x, y, z = symbols('x y z ', real=True)
transformations = (standard_transformations + (implicit_multiplication_application,)
self.eq1 = parse_expr(self.entry_5.get(), locals(), transformations=transformations)
self.dfx = diff(self.eq1, x)
self.dfy = diff(self.eq1, y)
self.dfz = diff(self.eq1, z) 

在此示例中,entry_5为x ** 2 + y ** 2 + z ** 2很好用

'Partial derivatives calculation:
 Partial der by X:  2*x
 Partial der by Y:  2*y
 Partial der by Z:  2*z

但是现在,我正在尝试使用相同的代码添加大写字母X,Y,Z:

.
.
.
x, y, z, X, Y, Z = symbols('x y z X Y Z', real=True)
.
.
.

现在,entry_5是-X ** 2 + y ** 2 + z ** 2(大写x) 输出为:

'Partial derivatives calculation:
 Partial der by X:  0
 Partial der by Y:  2*y
 Partial der by Z:  2*z

1 个答案:

答案 0 :(得分:0)

如果您希望将输入重铸为小写,以便您硬编码的派生词始终有效,则可以将输入转换为小写,或者更安全地提供locals来重新映射感兴趣的大写符号小写的符号。为了清楚起见,在下文中,我使用S来表示而不是解析器:

>>> S('x', {'x':'upper'})  # example showing you can replace 'x' with 'upper'
upper
>>> S('X', dict([(str(i), str(i).lower()) for i in symbols('X:Z')]))
x

在您的代码中,您将必须使用示例中使用的dict()更新本地语言:loc = locals(); loc.update(dict([(str(i), str(i).lower()) for i in symbols('X:Z')])),并在代码中使用loc而不是locals()。 / p>