2012-03-15 8 views
0

私は変数を解くための簡単なスクリプト(ex:x + 2でのxの検索= 10)をいくつかの実践のために作っています。変数を解決するために虚数を使った関数に遭遇するまで、私は多くの問題を抱えていました。私はそのことに取り組み、いくつか学んだが、今は2つの変数を解決したい。私のプログラムの主な考え方は次のとおりです。簡単な代数ソルバー(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

そのコードは構造が悪いです。 1つの 'try'ブロックに複数の行を置かないでください。また、意味のある変数名を使用してコメントを追加する(または少なくとも印刷出力を表示する)。 – Will

+0

私はちょうど主要な考えを下げることに集中していますが、ありがとう、私はそれを念頭に置いておきます。 – asqapro

答えて

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