Пользователь вводит функцию - PullRequest
1 голос
/ 13 декабря 2011

Я пишу программу, которая включает в себя вычисление максимума определенной пользователем функции, однако, если пользователь вводит функцию в терминах переменной, такой как x, т.е.

input = x**2 + 2*x + 1

Я (вполне ожидаемо) получаю ошибку, поскольку х не определено.

Кто-нибудь знает эффективный способ, позволяющий пользователю вводить функцию с точки зрения одной переменной, такой как x?

1 Ответ

2 голосов
/ 13 декабря 2011

Если вас не очень беспокоит безопасность, самое простое решение - eval выражение, например,

def calculate(value, function):
    x = value
    return eval(function)

print calculate(2, "x**2 + 2*x + 1")
print calculate(2, "x**3 - x**2 + 1")

Выход:

9
5

Вы можете сделать его более безопасным, передав пустой builtin dict, но все же я думаю, что какой-нибудь умный код сможет получить доступ к внутренним частям вашего кода.

...