我在我的数学游戏中应该使用表达式解析器吗?

7

我正在为一门课程编写一些儿童数学教育软件。

我将尝试以有趣的方式,使用不同类型的随机生成的数学问题呈现给掌握不同技能水平的学生。

使用计算机进行数学软件教育的一个令人沮丧的问题是其刻板性。如果您曾参加过在线数学课程,您就会知道在进行在线测验时因为您的答案与它们的格式不完全相同或存在一些奇怪的间距问题而导致您的正确答案被拒绝的沮丧感。

所以,起初我想,“我知道!我将在答案框中使用表达式解析器,这样我就可以评估他们输入的任何内容,即使它的形式不同,我也能检查它是否是相同的答案。”于是我启动了我的 IDE 并开始实现Shunting Yard Algorithm。

这将解决它无法接受最小形式的分数和其他问题。

然而,我突然意识到一个狡猾的学生只需将大部分问题输入答案框中,我的表达式解析器就会忠实地解析和评估它为正确答案!

那么,在这种情况下,我应该不使用表达式解析器吗?我真的必须生成一个单一的答案形式并进行字符串比较吗?


2
这是一个非常好的问题!请告诉我们你最终会做什么 - 我非常好奇。 - John Feminella
你能举一个既是问题又是答案的例子吗? - Greg
2
@Greg:他在谈论类似于:“500/2的值是多少?” “正确”的答案是250,但一个有进取心的学生可以直接复制粘贴“500/2”,表达式求值器也会接受它。 - John Feminella
5个回答

5
一种可能的解决方案是记录表达式求值器用于求解问题原始表达式的步骤数,并将其与最优答案进行比较。如果差异太大,则说明问题还没有被足够简化,你可以建议学生继续努力。
不过,如果学生提供的答案比您定义的“最优”答案更好,也不要感到惊讶!我曾经担任过几门课程的TA/阅卷人,最聪明的学生常常在他们的问题集中提供比教授提供的答案更好的答案。

2

对于简单的问题,如果您正在寻找确切的答案,那么去掉空格并进行字符串比较是合理的。

对于更复杂的问题,您可能会使用Shunting Yard算法(或类似算法),但也许可以将其参数化,以便您可以打开/关闭约减,以防止棘手的学生。您会注意到,“简单”的答案仍然可以使用解析器,但您将禁用所有约减。

例如,在除法问题上,您将禁用“/”约减。


很难确定何时禁用/缩减。例如,如果问题是“1/2 + 1/4 =”,用户可能会输入“3/4”。 - Joe

1

这是一个很棒的问题。

如果你正在编写一个表达式系统和一个评估/转换/等价引擎(是否有可用的?我几乎百分之百确定某个地方有一个开源的),那么它更像是一个教育/代数问题:学生的答案在代数上更接近原始表达式还是期望的表达式。

我不确定如何回答,但只是一个想法(不一定切实可行):也许你的评估引擎可以计算从原始表达式到等价表达式的转换步骤。如果答案所需的步骤比原始表达式少,则可能是可行的。如果它与原始表达式太接近,则不可以。


0
在数学评估软件中通常的做法是允许问题设置者指定在正确答案中不允许出现的表达式/字符串。
如果你对现有软件感兴趣,有开源的Stackhttp://www.stack.bham.ac.uk/(或各种商业选项,如MapleTA)。我怀疑你遇到的大多数问题也被Stack遇到过,即使你不想使用它,看看它的处理方法可能会很有教育意义。

0

您可以使用表达式解析器,但对允许出现在答案中的表达式进行限制。

例如,如果目标是简化(4/5)*(1/2),并且您想允许出现(2/5)或(4/10),那么您可以将可允许的答案集合限制为树形表达式采用(x/y)格式且计算结果正确的表达式。也许您还可以允许“0.4”,即采用(x)格式且计算结果正确的表达式。

这正是手动评分时您(隐含地)所做的--寻找正确但也符合可接受类别的答案。


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