2016-07-01 3 views
0

Я пытаюсь сделать простой решатель уравнения самостоятельно, чтобы решить такие проблемы, как (3 * x-4 = 7 + 2 * x). Пользователь войдет в уравнение, и программа разделит уравнение на две части, и в цикле он заменит 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 

Что вы должны сделать вместо этого, это использовать различные временные переменные для измененной версии side1 и side2.


Редактировать

Другие проблемы с фрагмента:

В последней строке следует читать print("x = %s" % (i+1)), так как вы используете i+1 в ваших замен. В противном случае, когда уравнение будет решено для ex, используя x=11, тогда оно будет печатать x=10.

Если вместо того, чтобы вы не хотите, чтобы беспокоиться о том, когда вам нужно i + 1 против i, вы можете просто изменить свой вызов диапазон для range(1,1000) - то, как он начинается с i = 1 вместо i = 0

+0

Есть ли способ, что я может пройти этот цикл? –

+0

Используйте предложение в нижней части сообщения: назовите свои измененные переменные чем-то другим. – xgord

+0

Также добавлено объяснение другой ошибки. – xgord

Смежные вопросы