Проверьте, эквивалентны ли два математических ответа - PullRequest
3 голосов
/ 21 декабря 2011

Я пишу небольшое приложение на python, которое позволяет пользователям отвечать на математические вопросы. У меня проблема с проверкой их ответов.

Скажем, есть вопрос типа: "Факторизация x^2 + 3x +2"

Есть разные способы ответить на этот вопрос; например:

  • (х + 1) (х + 2)
  • (х + 2) (х + 1)
  • (2 + x) (x + 1)
  • и т.д.

Есть ли библиотека, которая проверит, эквивалентен ли ответ другому? Особенно тот, который не упрощает данный ответ; так:

(x + 1)(x + 2) === (2 + x)(x + 1)

Но

(x + 1)(x + 2)! == x^2 + 3x +2

Я думал об использовании вольфрамальфы для этого - возможно ли это - и если да, то какой синтаксис мне следует использовать?

Спасибо!

Ответы [ 5 ]

1 голос
/ 21 декабря 2011

Вы можете попробовать использовать символическую математическую библиотеку, такую ​​как sympy .

Вызовите упрощенную логику как для вашего ответа, так и для ответа, предоставленного пользователем. При выполнении логики на обоих адресах эта проблема отмечена в документации:

точные стратегии, которые пробует эта функция, могут измениться в будущих версиях SymPy

0 голосов
/ 21 декабря 2011

Не думаю, что вам нужна библиотека для чего-то подобного. У вас есть пользовательский ввод, ограниченный ответами, которые понимает ваша программа (строки, которые имеют смысл), и затем выполняете обратную операцию, чтобы определить, верен ли их ответ, сопоставляя вопрос, или выбираете простой выход и имеете множественный выбор с переключателями. Итак, используя ваш пример, ваша программа расширит ответ, который они дают, и сравнит его с x ^ 2 + 3x + 2.

0 голосов
/ 21 декабря 2011

Вы можете посмотреть на wims . AFAIK это не написано на Python, но это с открытым исходным кодом, так что вы можете посмотреть на код и получить некоторые идеи.

0 голосов
/ 21 декабря 2011

Вы можете попробовать использовать SymPy.Это может помочь решить вашу проблему.http://docs.sympy.org/dev/gotchas.html#double-equals-signs

0 голосов
/ 21 декабря 2011

Да, Wolfram Alpha справится с этим (просто вставьте ваши условия в поиск, и он вернет логическое значение).

Вы, очевидно, не хотите делать это для каждого, чтобы вы могли обратиться к Wolfram Alpha API .У них есть библиотека Python, и она бесплатна для некоммерческого использования, до 2000 звонков в месяц.Если вам нужны коммерческие звонки или больше звонков, у них месячные тарифы.

Существуют локальные опции (например, Python), но у вас, скорее всего, будут больше проблем с синтаксисом, форматированием, чтобы ваши пользователи не передаваливредоносный код Python и просто поддержка всего.WA-API должен устранить большинство проблем за вас, но сначала проверьте его.

...