Решите уравнение с одной переменной, используя операторы if, else и while в python - PullRequest
0 голосов
/ 27 октября 2018

Я учу семиклассника по основам программирования и математики. Одна из задач, которую ученикам необходимо выполнить для выполнения задания класса, - «создать программу для решения заданного линейного уравнения с одной переменной». Студент должен использовать Python и использовать только операторы if, else и while. Программа может включать пользовательские функции и списки, но не может импортировать какие-либо библиотеки, такие как regex, sympy, numpy и т. Д.

Программа должна быть в состоянии решить эти примеры уравнений:

  • 2 * х - 5 = 8
  • 4 * х + 3 = 3 * х - 10
  • 11 * x = 2 - (1/5) * x
  • 4 * (x + 2) = 5 * (x + 9)

Я пытался: для каждого символа в строке записать цифры, операторы, равно знаку и переменную. Скопируйте переменную и ее коэффициент в новую строку, а константы с их знаками - в другую строку. Я надеялся, что в конечном итоге я извлеку целые числа из каждой строки и решу уравнение для x. Но я не правильно записывал числа с несколькими цифрами. И уравнение с круглыми скобками полностью поставило меня в тупик. Невозможность использовать регулярные выражения или sympy - это больно!

Я ищу питоническое решение этой проблемы, если оно существует.

Я чувствую, что это очень сложный вопрос для 7-го класса, потому что мои друзья из старших классов и старшекурсников не смогли найти решение. Любой совет о том, как действовать, поможет, если программное решение не доступно.

Спасибо.

1 Ответ

0 голосов
/ 27 октября 2018

Хотя вполне возможно построить конечный автомат для решения выражения, это не простая задача.

У меня было много заданий, связанных с созданием синтаксического или синтаксического синтаксического анализатора, но обычно это делаетсяв C: https://codereview.stackexchange.com/questions/112620/simple-expression-calculator-in-c.

Тем не менее, если вы принимаете умное / опасное / плохое решение:

def solve_expression(expr, var="x"):
    expr = expr.replace(var, "1j")
    left, right = map(eval, expr.split("="))

    return (right.real-left.real)/(left.imag-right.imag)

print(solve_expression("2*x - 5 = 8"))
print(solve_expression("4*x + 3 = 3*x - 10"))
print(solve_expression("11*x = 2 - (1/5)*x"))
print(solve_expression("4*(x + 2) = 5*(x + 9)"))

Идея состоит в том, чтобы преобразовать свободную переменную в мнимую единицу и позволитьПереводчик Python сделает все остальное.

...