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.