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

2024-06-16 08:44:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想避免在我编写的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) 

对于这个例子来说,它工作得很好,条目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)
.
.
.

现在,条目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

Tags: fromimportself脚本parserbyparsediff
1条回答
网友
1楼 · 发布于 2024-06-16 08:44:17

如果您希望将输入改写为小写,以便硬编码的导数始终有效,您可以将输入转换为小写,或者更安全地提供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()

相关问题 更多 >