2011-12-20 6 views
3

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

Say есть вопрос, как: «факторизовать x^2 + 3x +2»

Существуют различные способы, чтобы ответить на этот вопрос; например:

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

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

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

Но

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

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

Спасибо!

+4

Это уже не маленькое приложение в python ... – antlersoft

+2

http://code.google.com/p/sympy/ –

+0

Какие примитивы вы допускаете в своих выражениях? Вы разрешаете exp, ln, sin, cos? (Если вы это сделаете, проблема упрощения станет неразрешимой) –

ответ

1

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

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

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

+0

Это выглядит очень многообещающим - спасибо за предложение. Проблема все еще заключается в том, что пользователь может просто ввести исходный вопрос и, если это будет отмечено, будет правильным ... – bluepnume

+0

@bluepnume Для конкретного случая многочленов факторинга вы можете убедиться, что все вхождения «x» относятся к первому сила только. Возможно, это связано с регулярным выражением, чтобы обеспечить структуру решения. – nsanders

0

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

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

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

+0

Звучит здорово, но можете ли вы подумать о том, как пользователь может просто вводить вопрос в качестве своего ответа и с его помеченным как правильно? – bluepnume

+0

Ну, это проще. Если вы факторизуете, вам просто нужно искать определенные вещи в ответе, так как убедитесь, что есть две группы круглых скобок, отдельные группы x и т. Д. Но пользователь все равно может вставить вопросы в WA и ace test. – Oli

0

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

0

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

+0

Существует не менее 10 различных перестановок правильного ответа на пример в этом вопросе. вы серьезно думаете, что это хорошая идея, чтобы пользователь/учитель вводил десять разных правильных ответов? Проблема должна быть хотя бы частично разрешимой с помощью основных арифметических правил. –

+0

С помощью моего метода программа не нуждается в 10+ ответах в качестве строк для проверки ввода. Он принимает пользовательский ввод (пользователи отвечают), генерирует расширение и проверяет его на свою копию того, что было задано (вопрос, который вводил учитель). Для примера факторизации программа будет принимать входные данные, токенизировать, а затем делать некоторое умножение и выплевывать результат в стандартной форме (например, в виде строки или массива коэффициентов). Очень легко написать код, который сохраняет ответы в той же форме. – daniel

+0

Тогда я, должно быть, неправильно понял ваш ответ :-) –

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