Python 中的 IVT 定理计算器
IVT Theorem Calculator in Python
我有问题。
def f(x):
function = input("Enter yoru Function: ")
return function
a = -1
b = 2
a_Applied = f(a)
b_Applied = f(b)
if a_Applied < 0 and b_Applied > 0:
print "IVT Applies."
elif a_Applied > 0 and b_Applied < 0:
print "IVT Applies"
else:
print "IVT Does Not Apply"
这是我当前的代码。我试图让用户在第 2 行中创建一个函数。但是这会破坏程序,因为它是一个字符串。我如何让它不是一个字符串,而是让它能够接受一个函数。
例如
用户输入“2*x + 1”
在完美世界中,程序然后运行 2(a) +1 和 2(b) + 1,然后使用 if 语句比较它们。因为输入的是字符串 ti 不起作用。
有什么帮助吗?
使用lambda
表达式和eval
函数。像这样。
def read_user_function():
function_str = input("Enter your Function: ")
return lambda x: eval(function_str, { 'x' : x })
通过
调用用户函数
f = read_user_function()
print(f(2))
这是一个演示 https://repl.it/ITuU/2。
说明
上面的函数,read_user_function
returns 一个 lambda 表达式,基本上是一个函数,它将使用变量评估用户的输入,有点像参数,x
设置为传递给 lambda 表达式的 x
值。如果您对这类事情不熟悉,这可能会让人感到困惑,但只需将 read_user_function
视为返回一个接受单个参数且其主体等于 eval(function_str, { 'x' : x })
的匿名函数
警告
这是评估数学表达式的一种快速而肮脏的解决方案。该函数将执行任何有效的 python 代码,而不仅仅是数学表达式。如果您的应用程序是敏感的,这可能很危险——您不希望用户执行自定义代码。
你要求做的事情很难(一般来说)。您需要为所有支持的操作定义严格的语义(例如,是 power ^
还是像您在 python 中所做的那样 **
?)。
sympy
图书馆为您提供了一个开始。如果您假设您的输入是多项式,例如:
import sympy
y = sympy.Poly("x^2 + 2*x + 1")
print(y(3))
# outputs 16
sympy
还有一个优点是它也可以接受 "python-like" 输入:
import sympy
y = sympy.Poly("x**2 + 2*x + 1")
print(y(3))
注意sympy
不限于多项式,因为多项式比较简单,这里只是举个例子。
我有问题。
def f(x):
function = input("Enter yoru Function: ")
return function
a = -1
b = 2
a_Applied = f(a)
b_Applied = f(b)
if a_Applied < 0 and b_Applied > 0:
print "IVT Applies."
elif a_Applied > 0 and b_Applied < 0:
print "IVT Applies"
else:
print "IVT Does Not Apply"
这是我当前的代码。我试图让用户在第 2 行中创建一个函数。但是这会破坏程序,因为它是一个字符串。我如何让它不是一个字符串,而是让它能够接受一个函数。
例如
用户输入“2*x + 1” 在完美世界中,程序然后运行 2(a) +1 和 2(b) + 1,然后使用 if 语句比较它们。因为输入的是字符串 ti 不起作用。
有什么帮助吗?
使用lambda
表达式和eval
函数。像这样。
def read_user_function():
function_str = input("Enter your Function: ")
return lambda x: eval(function_str, { 'x' : x })
通过
调用用户函数f = read_user_function()
print(f(2))
这是一个演示 https://repl.it/ITuU/2。
说明
上面的函数,read_user_function
returns 一个 lambda 表达式,基本上是一个函数,它将使用变量评估用户的输入,有点像参数,x
设置为传递给 lambda 表达式的 x
值。如果您对这类事情不熟悉,这可能会让人感到困惑,但只需将 read_user_function
视为返回一个接受单个参数且其主体等于 eval(function_str, { 'x' : x })
警告
这是评估数学表达式的一种快速而肮脏的解决方案。该函数将执行任何有效的 python 代码,而不仅仅是数学表达式。如果您的应用程序是敏感的,这可能很危险——您不希望用户执行自定义代码。
你要求做的事情很难(一般来说)。您需要为所有支持的操作定义严格的语义(例如,是 power ^
还是像您在 python 中所做的那样 **
?)。
sympy
图书馆为您提供了一个开始。如果您假设您的输入是多项式,例如:
import sympy
y = sympy.Poly("x^2 + 2*x + 1")
print(y(3))
# outputs 16
sympy
还有一个优点是它也可以接受 "python-like" 输入:
import sympy
y = sympy.Poly("x**2 + 2*x + 1")
print(y(3))
注意sympy
不限于多项式,因为多项式比较简单,这里只是举个例子。