简体   繁体   中英

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?

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM