pythoninputpolynomials

Polynomials as input in Python


How can you make Python take a polynomial as an input while maintaining the ability to substitute x for a real value?

Here is what I tried:

fx=input("Enter a Polynomial: ")
x=float(input("At which position should the polynomial be evaluated: "))

while True:
    print(eval("fx"))

    continue

The problem that arises is that Python will just evaluate fx as x and not as the value that I gave to x via my second input.


Solution

  • This should help:

    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] )
    

    Please keep in mind that you earlier have to make sure val is a number for safety reasons.

    EDIT: more self-descriptive version as asked by 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)