У меня есть класс с именем NumApprox, он принимает строку в качестве входных данных (математическое выражение, содержащее переменную «x»), и все методы в нем — это просто разные подходы к интеграции математического выражения с заданным числовым значением для «x».
ожидаемые примеры ввода:
input = " x ** 2 * log( x ) "
input = "1 / sqrt(2*pi) * exp(- x **2 / 2) "
Мне было интересно, как я могу изолировать и взять под контроль переменную «x», предоставленную строковым вводом, и использовать ее из любого места в моем классе без функции «eval».
Это то, что я сделал, но мне не нравится эта функция "eval" и, учитывая мои ограниченные знания о классах Python... Я хотел бы знать, есть ли лучшая альтернатива "eval"?
from math import pi, sqrt, exp, log
class NumApprox:
def __init__(self, expr):
self.expr = expr
def pdf(self, x):
self.x = x
self.ev = eval( self.expr.replace('x', 'self.x') )
return self.ev
def integrate_rect_method(self, A, B, n):
...
eval
, вам, вероятно, придется начать искать какой-то синтаксический анализатор. - person Iluvatar   schedule 06.12.2016self.expr.replace('x', 'self.x')
, когдаexpr
станетexp(x)
? - person donkopotamus   schedule 06.12.2016"exp( x )"
, и в этом случае он вернет" exp( self.x ) "
. выражение должно быть строкой; это единственный известный мне способ вызывать один и тот же объект класса для интеграции произвольных выражений. - person jwdasdk   schedule 06.12.2016exp(self.x)
... он вернетeself.xp(self.x)
. - person donkopotamus   schedule 07.12.2016self.expr.replace(' x ', 'self.x')
), и то же самое касается «x» в выражении,expr = ' exp( x ) '
, чтобы оно работало. - person jwdasdk   schedule 07.12.2016