3

我正在用 python 编写一个小应用程序,让用户回答数学问题。我遇到的问题是检查他们的答案。

假设有这样一个问题:“Factorise x^2 + 3x +2

有不同的方法可以回答这个问题;例如:

  • (x + 1)(x + 2)
  • (x + 2)(x + 1)
  • (2 + x)(x + 1)
  • 等等

是否有一个库可以检查答案是否与另一个相同?特别是不能简化给定答案的答案;所以:

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

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

我考虑过为此使用 wolframalpha——这可能吗——如果可以,我应该使用什么语法?

谢谢!

4

5 回答 5

1

您可以尝试使用像sympy这样的符号数学库。

在您的答案和用户提供的答案上调用简化逻辑。在两者上运行逻辑解决了文档中提到的这个问题:

这个函数尝试的确切策略可以在 SymPy 的未来版本中改变

于 2011-12-20T23:37:03.437 回答
0

是的,Wolfram Alpha 会处理这个问题(只需将你的条件放入搜索中,它就会返回一个布尔值)。

您显然不想为每一个都这样做,因此您可以求助于Wolfram Alpha API。他们有一个 Python 库,并且可以免费用于非商业用途,每月最多 2000 次调用。如果您需要商业电话或更多电话,他们有每月的资费。

有本地选项(如 Python),但您可能会在语法、格式设置方面遇到更多问题,确保您的用户没有传递恶意 Python 代码并且只支持所有内容。WA-API 应该为您解决大部分问题,但首先要对其进行测试。

于 2011-12-20T23:34:40.797 回答
0

您可以尝试使用 SymPy。它可能有助于解决您的问题。 http://docs.sympy.org/dev/gotchas.html#double-equals-signs

于 2011-12-20T23:34:48.700 回答
0

你可能想看看wims。AFAIK 它不是用 python 编写的,但它是开源的,因此您可以查看代码并获得一些想法。

于 2011-12-20T23:37:14.620 回答
0

I don't think you need a library for something like that. You have the user input limited to answers your program understands (strings that make sense) and then do the reverse operation to find if their answer is correct by matching the question, or take the easy way out and have radio button multiple choice. So using your example you have your program expand out the answer they give, and check it against x^2 + 3x +2.

于 2011-12-20T23:37:26.843 回答