检查两个数学答案是否等价

3
我正在用Python编写一个小应用程序,让用户回答数学问题。我遇到的问题是检查他们的答案。
假设有这样一个问题:“因式分解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
这个应用程序已不再是一个简单的Python小应用了... - antlersoft
2
http://code.google.com/p/sympy/ - Luka Rahne
你的表达式中允许哪些基本元素?你允许exp、ln、sin、cos吗?(如果允许,简化问题将变得无法解决) - Basile Starynkevitch
5个回答

1
你可以尝试使用类似sympy的符号数学库。
在你的答案和用户提供的答案上都调用simplify逻辑。这样做可以解决文档中提到的问题:

在未来版本的SymPy中,此函数尝试的确切策略可能会发生变化


这看起来非常有前途--感谢您的建议。不过仍然存在一个问题,那就是用户可以只输入原始问题,并将其标记为正确... - bluepnume
@bluepnume 对于分解多项式的特定情况,您可以确保所有出现的“x”仅为一次幂。也许这再加上一个正则表达式来强制执行解决方案的结构。 - nsanders

0

是的,Wolfram Alpha可以处理这个问题(只需将条件输入搜索框,它就会返回布尔值)。

显然你不想为每一个条件都这样做,所以你可以使用 Wolfram Alpha API。他们有一个Python库,非商业用途免费,每月最多2000次调用。如果你需要商业调用或更多调用,他们有月度收费。

还有本地选项(如Python),但你可能会遇到更多的语法、格式化、确保用户不会传入恶意Python代码以及支持所有内容等问题。WA-API应该能够为您解决大部分问题,但请先进行测试。


很好,但你能想到一种方法来防止用户仅将问题输入为答案并将其标记为正确吗? - bluepnume
那就更简单了。如果你在因式分解,你只需要在答案中寻找某些特定的东西,比如确保有两组括号、分离的x组等等。但是用户仍然可以将问题粘贴到WA中并通过测试。 - Oli

0

0

你可能想看看wims。据我所知,它不是用Python编写的,但它是开源的,所以你可以查看代码并获得一些想法。


0

我认为你不需要为这样的事情使用库。你可以将用户输入限制在程序理解的答案上(有意义的字符串),然后执行反向操作以查找他们的答案是否正确,方法是匹配问题,或者采取简单的方式,使用单选按钮多项选择。因此,使用你的示例,你的程序可以展开他们给出的答案,并将其与x ^ 2 + 3x + 2进行比较。


这个问题的示例至少有10种不同的正确答案排列组合。你真的认为要求用户/教师输入十个不同的正确答案是一个好主意吗?这个问题应该至少部分地可以通过基本算术规则来解决。 - Emil Vikström
使用我的方法,程序不需要将10个以上的答案作为字符串来检查输入。它会获取用户输入(即用户的答案),生成扩展并将其与提问者输入的问题进行比较。对于因式分解的示例,程序将获取输入,标记化,然后进行一些乘法,最终以标准形式(如字符串或系数数组)输出结果。编写代码以使其答案保持相同的形式非常容易。 - daniel
那么我一定误解了你的回答 :-) - Emil Vikström

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接