как сделать пользовательский ввод символов без учета регистра - PullRequest
1 голос
/ 06 октября 2019

Я хочу избежать ошибок caps lock в базовом скрипте scypy , который я сделал. Скрипт вычисляет частные производные

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

, но теперь я 'm пытается добавить заглавные буквы X, Y, Z с тем же кодом:

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

сейчас, entry_5 is- 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 голосов
/ 06 октября 2019

Если вы хотите, чтобы ваш ввод был преобразован в нижний регистр, чтобы производные, которые вы жестко закодировали, всегда работали, вы можете либо преобразовать ввод в нижний регистр, либо, что более безопасно, предоставить 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() в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...