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)
答案 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)