2016-07-01 2 views
0

私は、(3 * x-4 = 7 + 2 * x)のような問題を解決する簡単な方程式ソルバーを私自身で作成しようとしています。ユーザは方程式を入力し、プログラムは方程式を2つの部分に分割し、ループでは、両辺のxを同じ数に置き換えます。プログラムは、方程式の両辺が等しいかどうかをチェックし、答えを出力します。これはスクリプトです:私の方程式プログラムを修正しようとしています

equation=input("Write an equation (variable is x): ") 

side1 = equation[:equation.index("=")] 

side2 = equation[equation.index("=")+1:] 

for i in range(1000): 
    side1=side1.replace("x", str(i+1)) 
    side2=side2.replace("x", str(i+1)) 

    if eval(side1)==eval(side2): 
     print("x = %s"%i) 

これは、プログラムの私の完全な計画はありませんが、私はそれをアップグレードしようとしていましたが、私は、このプログラムはとても良い動作しないことがわかりました。私が方程式を入力すると、プログラムは解答もエラーも出力しません。 ここではバグとは何かを理解する必要があります。

あなたのループでは

答えて

2

、あなたが呼び出すたび:

side1=side1.replace("x", str(i+1)) 
side2=side2.replace("x", str(i+1)) 

あなたは、元の側の変数を上書きしています。したがって、ループが次に実行されるときに、文字列の 'x'を置き換えるときには、もはや 'x'文字はありません。交換は一度だけ行われます。

Ex。あなたの代わりに何をすべき

# Beginning of Iter 1: 
side1 = 3*x-4 

# Beginning of Iter 2: 
side1 = 3*1-4 

# no longer any 'x' left to replace 

side1side2のご変更されたバージョンの異なる一時変数を使用しています。スニペットと


編集

その他の問題:

あなたの代替品でi+1を使用するので、最後の行は、print("x = %s" % (i+1))をお読みください。そうでない場合、x=11を使用して方程式を解くと、x=10が出力されます。

代わりにあなたがii + 1を必要とするときを心配したくない場合は、あなただけのrange(1,1000)にあなたの範囲のコールを変更することができます - それはi = 1代わりのi = 0

+0

で始まるその方法は、私の方法はありますそのxループを渡すことができますか? –

+0

私のポストの一番下にある提案を使用してください:あなたの変更された変数の名前を変更してください。 – xgord

+0

別のバグの説明も追加されました。 – xgord

関連する問題