如何从 python 中的输入中获取方程


def func(x): 
return x*x*x - x*x + 2
# Prints root of func(x) 
# with error of EPSILON 
def bisection(a,b): 
if (func(a) * func(b) >= 0): 
print("You have not assumed right a and bn") 
return
c = a 
while ((b-a) >= 0.01): 
# Find middle point 
c = (a+b)/2
# Check if middle point is root 
if (func(c) == 0.0): 
break
# Decide the side to repeat the steps 
if (func(c)*func(a) < 0): 
b = c 
else: 
a = c 
print("The value of root is : ","%.4f"%c) 

在上面的代码中,我想从用户那里获取方程作为输入,这里我使用 x x x - x*x + 2,但我想从用户输入中获取一个方程而不是它并在函数 func(x( 上使用它

如果这些代码是出于学术目的,并且您不想涉及第三方库,那么 Python 中的eval()函数就是为此而构建的。您可以创建一个函数,该函数计算字符串表达式expr的值x如下:

def func(expr, x):
return eval(expr)
input_expr = input('Enter an expression in x: ')
val = 5
print(func(input_expr, val))
输入: x*x*x

- x*x + 2

输出:102

eval()将传递给它的字符串视为右侧表达式并对其进行计算。因此,当用户输入字符串'x*x*x - x*x + 2'传递给函数时,语句return eval('x*x*x - x*x + 2')等效于return x*x*x-x*x+2

请注意,这意味着作用域中必须有一个变量x,我们通过将 eval(( 函数包装在函数eval_expr()中来处理该变量。

但是,如果用户输入类似y*y*y+y*y-2的内容,因为y未在作用域中声明,则会出现问题。如果您需要处理这种情况,则需要编写其他代码,通过将输入字符串中的任何字母字符替换为x来转换输入字符串。

应该注意的是,eval通常被认为是不安全的,如果这段代码不是出于学术目的并且需要安全,你应该考虑使用像 numexpr 或 pyparsing 这样的 python 库。 numexpr 应该相当易于使用,并且足以满足您的应用程序。

只需将其添加为参数:

def bisection(func, a, b): 
if (func(a) * func(b) >= 0): 
print("You have not assumed right a and bn") 
return
c = a 
while ((b-a) >= 0.01): 
# Find middle point 
c = (a+b)/2
# Check if middle point is root 
if (func(c) == 0.0): 
break
# Decide the side to repeat the steps 
if (func(c)*func(a) < 0): 
b = c 
else: 
a = c 
print("The value of root is : ","%.4f"%c) 

最新更新