多项式作为 Python 中的输入
Polynomials as input in Python
如何让 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 而不是我通过第二个输入给 x 的值。
由于特定变量,例如x
,并不重要,只需让用户输入一个数字序列,这将是多项式的系数。让用户输入常数系数,然后是线性系数,然后是二次系数,等等。如果这些是作为单独的输入完成的,您将需要一个停止信号,一个不是数字的信号。如果您希望所有这些都作为一个输入,用户可以在系数之间放置空格或逗号或类似的东西,并且不需要停止信号。
然后将系数放入列表中:如果输入是一行,只需使用 split()
方法。对多项式的任何操作,例如代入变量,都可以用这个列表来完成。例如,可以使用 Horner's method 轻松高效地完成替换。有简单的加法、减法、乘法、除法、微分等算法。如果您需要有关如何在 Python.
中实现任何这些算法的更多详细信息,请告诉我
Python的eval()
函数非常危险,所以我强烈建议你不要使用它,尽管它很简单。
这应该有帮助:
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)
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
此代码将用于将多项式作为 y 的输入。
y = x**2 + x*4 并且它将 x 的输入作为浮点值,就像如果我为 x 给出 2 那么这个表达式将打印 12。
在此代码中,我使用 eval 表示求值,即 python 3 的内置函数
在此 eval 中,多项式函数作为字符串传递,然后自变量的值,即多项式 y 的 x 在 eval 中作为字符串作为第二个参数传递。
y = input("输入一个多项式:")
x = float(input("在哪个位置计算多项式:"))
dict = {}
d['x'] = x
打印(评估(y,d))
如何让 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 而不是我通过第二个输入给 x 的值。
由于特定变量,例如x
,并不重要,只需让用户输入一个数字序列,这将是多项式的系数。让用户输入常数系数,然后是线性系数,然后是二次系数,等等。如果这些是作为单独的输入完成的,您将需要一个停止信号,一个不是数字的信号。如果您希望所有这些都作为一个输入,用户可以在系数之间放置空格或逗号或类似的东西,并且不需要停止信号。
然后将系数放入列表中:如果输入是一行,只需使用 split()
方法。对多项式的任何操作,例如代入变量,都可以用这个列表来完成。例如,可以使用 Horner's method 轻松高效地完成替换。有简单的加法、减法、乘法、除法、微分等算法。如果您需要有关如何在 Python.
Python的eval()
函数非常危险,所以我强烈建议你不要使用它,尽管它很简单。
这应该有帮助:
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)
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
此代码将用于将多项式作为 y 的输入。
y = x**2 + x*4 并且它将 x 的输入作为浮点值,就像如果我为 x 给出 2 那么这个表达式将打印 12。 在此代码中,我使用 eval 表示求值,即 python 3 的内置函数 在此 eval 中,多项式函数作为字符串传递,然后自变量的值,即多项式 y 的 x 在 eval 中作为字符串作为第二个参数传递。
y = input("输入一个多项式:") x = float(input("在哪个位置计算多项式:"))
dict = {}
d['x'] = x
打印(评估(y,d))