Search code examples
pythonalgebra

Advice on a simple algebra solver(python)


I've been working on making a simple script to solve for variables (ex: Find x in x + 2 = 10) for some practice. I was having a lot of trouble until I stumbled upon a function that used imaginary numbers to solve for the variable. I played around with that and learned some, but I want it to solve for two variables now. Here's the main idea of my program:

def solve(eq,var1='x', var2='y'):
    if '+' in eq:
        try:
            eq1 = eq.replace("=","-(")+")"
            eq2 = eq1.replace('+','-')
            print eq1
            print eq2
            c = eval(eq2,{var1:1j},{var2:1j})
            print c
            c = -c.real/c.imag
            eq3 = eq1.replace('x',str(int(c)))
            eq4 = eq3.replace('y',str(int(c)))
            eq5 = eq4.replace('-(', '=')
            eq6 = eq5.replace(')','')
            if eq6 == True:
                print 'test1'
                print eq6
            else:
                print 'oops1'
                print eq6

Everything else in the program is compensating for different equations. I'm having trouble getting it to confirm the equation is solved (eq6 == True). Any advice? Or mistakes I've made?


Solution

  • To test to see if the expression is true, you need to evaluate it. For example:

    > '1 + 1 == 2' == True
    False
    > eval('1 + 1 == 2') == True
    True
    

    Also you need to make sure to use == instead of = when evaluating. If I change the end of your code like:

    eq7 = eq6.replace('=', '==')
    if eval(eq7) == True:
        print 'test1'
        print eq7
    else:
        print 'oops1'
        print eq7
    

    and try

    solve('x + 2 = 10')
    

    I get

    x + 2 -( 10)
    x - 2 -( 10)
    (-12+1j)
    oops1
    12 + 2 == 10
    

    which, though still not quite what you want, is more on the right track.