Python中多项式作为输入

4

如何使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,而不是通过我的第二个输入给出的值来计算。

3
尝试使用eval(fx) - Alex Hall
这个也起作用了。谢谢 :-) - Christian Singer
4个回答

5
这应该会有所帮助:
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] )

请记住,出于安全原因,您必须先确保val是一个数字。
编辑:根据Dipen Bakraniya的要求,这里提供更加自我描述的版本。
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)

4

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

3

由于特定变量,比如x并不重要,因此只需让用户输入一系列数字,这些数字将成为多项式的系数。让用户先输入常数项系数,然后是一次项系数,接着是二次项系数,以此类推。如果这些系数作为单独的输入,则需要一个停止信号,即不是数字的信号。如果您希望将其全部作为一个输入,则用户可以在系数之间放置空格、逗号或类似的内容,无需停止信号。

然后您将系数放入列表中:如果输入是一行,则只需使用split()方法。对于多项式的任何操作,例如替换为变量,都可以使用此列表完成。例如,可以使用霍纳法则轻松高效地进行替换。加法、减法、乘法、除法、微分等都有简单的算法。如果需要更多关于如何在Python中实现这些算法的详细信息,请告诉我。

Python的eval()函数非常危险,因此我强烈建议您不要使用它,尽管它很简单。


谢谢您的建议,使用系数矩阵而不是整个多项式似乎也是一个有前途的想法,我会记在未来的项目中。 - Christian Singer

0

这段代码将用于输入多项式 y,例如:

y = x**2 + x*4,它以浮点数的形式输入 x,例如如果我给出 x=2,则该表达式将打印出 12。

在这个代码中,我使用了 Python 3 的内置函数 eval,即 evaluate。在 eval 中,多项式函数作为字符串传递,然后独立变量 x 的值作为字符串传递到 eval 中作为第二个参数。

y = input("请输入一个多项式:") x = float(input("在哪个位置应该计算多项式:"))

dict = {}

d['x'] = x

print(eval(y, d))

https://istack.dev59.com/i825Z.webp


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接