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

时间:2018-10-01 18:22:41

标签: python python-3.x

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 b\n") 
        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)

2 个答案:

答案 0 :(得分:1)

如果这些代码是出于学术目的,并且您不想涉及第三方库,那么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或{{ 3}}。 numexpr应该非常易于使用,并且足以满足您的应用程序要求。

答案 1 :(得分:0)

只需将其添加为参数:

def bisection(func, a, b): 

    if (func(a) * func(b) >= 0): 
        print("You have not assumed right a and b\n") 
        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)