2012-03-15 65 views
0

我一直在做一個簡單的腳本來解決某些練習中的變量(例如:在x + 2 = 10中尋找x)。直到我偶然發現一個使用虛數來解決變量的函數之前,我遇到了很多麻煩。我玩弄了一些,並學到了一些,但我想現在解決兩個變量。這裏是我的程序的主要想法:關於一個簡單的代數求解器的建議(python)

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

該代碼構造嚴重。切勿在一個'try'塊中放置多行。另外,最好使用有意義的變量名稱並添加註釋(或至少顯示打印輸出)。 – Will 2012-03-15 03:33:39

+0

我關注的只是主要想法,但謝謝,我會牢記這一點。 – asqapro 2012-03-15 03:44:54

回答

1

要測試表達式是否爲真,您需要評估它。例如:

> '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 

這雖然還沒有你所需的東西,更多的是在右邊跟蹤。

+0

這正是我需要的,謝謝你:D – asqapro 2012-03-15 11:41:01