如何使Python能够接受多项式作为输入,同时保留将x替换为实际值的能力?
这是我尝试过的方法:
fx=input("Enter a Polynomial: ")
x=float(input("At wich position should the polynomial be evaluated: "))
while True:
print(eval("fx"))
continue
问题是Python只会将fx视为x,而不是通过我的第二个输入给出的值来计算。
如何使Python能够接受多项式作为输入,同时保留将x替换为实际值的能力?
这是我尝试过的方法:
fx=input("Enter a Polynomial: ")
x=float(input("At wich position should the polynomial be evaluated: "))
while True:
print(eval("fx"))
continue
def eval_polynomial(poly, val):
xs = [ x.strip().replace('^','**') for x in poly.split('+') ]
return sum( [eval(n.replace('x', str(val))) for n in xs] )
def fix_power_sign(equation):
return equation.replace("^", "**")
def eval_polynomial(equation, x_value):
fixed_equation = fix_power_sign(equation.strip())
parts = fixed_equation.split("+")
x_str_value = str(x_value)
parts_with_values = (part.replace("x", x_str_value) for part in parts )
partial_values = (eval(part) for part in parts_with_values)
return sum(partial_values)
Python 3
你可以这样写:
fx = input("Enter a Polynomial: ")
x = float(input("At wich position should the polynomial be evaluated: "))
print(eval(fx.replace('x', str(x))))
*
的形式输入多项式时才有效。例如:x**4 - x + 1
。由于特定变量,比如x
并不重要,因此只需让用户输入一系列数字,这些数字将成为多项式的系数。让用户先输入常数项系数,然后是一次项系数,接着是二次项系数,以此类推。如果这些系数作为单独的输入,则需要一个停止信号,即不是数字的信号。如果您希望将其全部作为一个输入,则用户可以在系数之间放置空格、逗号或类似的内容,无需停止信号。
然后您将系数放入列表中:如果输入是一行,则只需使用split()
方法。对于多项式的任何操作,例如替换为变量,都可以使用此列表完成。例如,可以使用霍纳法则轻松高效地进行替换。加法、减法、乘法、除法、微分等都有简单的算法。如果需要更多关于如何在Python中实现这些算法的详细信息,请告诉我。
Python的eval()
函数非常危险,因此我强烈建议您不要使用它,尽管它很简单。
eval(fx)
。 - Alex Hall