关于简单代数求解器(python)的建议

时间:2012-03-15 03:25:01

标签: python algebra

我一直在努力制作一个简单的脚本来解决变量(例如:在x + 2 = 10中查找x)。我遇到了很多麻烦,直到我偶然发现了一个使用虚数来求解变量的函数。我玩弄了一些并学到了一些,但我希望它现在可以解决两个变量。这是我的计划的主要想法:

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

程序中的其他所有内容都在补偿不同的方程式。我无法确定等式是否已解决(eq6 == True)。有什么建议?或者我犯过的错误?

1 个答案:

答案 0 :(得分:1)

要测试表达式是否为true,您需要对其进行评估。例如:

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

此外,您还需要确保在评估时使用==代替=。如果我更改代码的结尾,如:

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

并尝试

solve('x + 2 = 10')

我得到了

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

虽然仍然不是你想要的,但是更多的是在正确的轨道上。