【问题标题】:Should I use an expression parser in my Math game?我应该在我的数学游戏中使用表达式解析器吗?
【发布时间】:2009-04-30 15:35:36
【问题描述】:

我正在为班级编写一些儿童数学教育软件。

我将尝试以有趣的方式通过随机生成的不同类型的数学问题向不同技能水平的学生提出问题。

使用基于计算机的数学软件的一个挫折是它的死板。如果有人参加了在线数学课程,您就会知道参加在线测验并因为您的问题没有完全按照他们的形式或一些奇怪的间距问题而被丢弃正确答案的挫败感。

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

这将解决它不采取最小形式的分数和其他问题。

然而,我突然想到,一个狡猾的学生只需将大部分问题输入答案框,我的表达式解析器就会尽职尽责地解析并评估它以获得正确的答案!

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

【问题讨论】:

  • 真是个好问题!请让我们知道你最终要做什么——我很好奇。
  • 你能举一个问题的例子吗?
  • @Greg:他在谈论类似:“500 / 2 的值是多少?” “正确”答案是 250,但有进取心的学生只需在复制粘贴中输入“500 / 2”,表达式评估器就会接受。

标签: math expression-trees evaluation


【解决方案1】:

一种可能的解决方案是记录您的表达式评估器执行了多少步来评估问题的原始表达式,并将其与最佳答案进行比较。如果差异太大,说明问题还没有减少到足够的程度,您可以建议学生继续学习。

不过,如果学生提出的答案比您自己对“最佳”的定义更好,请不要感到惊讶!我是几个班级的助教/评分员,最聪明的学生通常会在他们的问题集上得到优于教授提供的答案。

【讨论】:

    【解决方案2】:

    对于您正在寻找确切答案的简单问题,删除空格并进行字符串比较是合理的。

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

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

    【讨论】:

    • 可能很难确定何时禁用 / 减少。例如,如果问题是“1/2 + 1/4 =”,则用户可以输入“3/4”
    【解决方案3】:

    这是一个很好的问题。

    如果您正在编写一个表达式系统和一个评估/转换/等效引擎(在某处没有可用的引擎吗?我几乎 100% 确定某处有一个开源引擎),那么它更像是一种教育/代数问题:学生的答案在代数上是否更接近原始表达式或预期表达式。

    我不知道如何回答,只是一个想法(不一定实用):也许您的评估引擎可以将转换步骤计算为等价。如果答案对预期的步骤比对原始答案的步骤少,那可能没问题。如果太接近原版,则不是。

    【讨论】:

      【解决方案4】:

      您可以使用表达式解析器,但对答案中允许的表达式的复杂性施加限制。

      例如,如果目标是减少 (4/5)*(1/2),并且您希望允许 (2/5) 或 (4/10),那么您可以限制允许的答案集到其树采用 (x/y) 形式并且也计算为正确数字的表达式。也许您还允许“0.4”,即计算结果为正确数字的 (x) 形式的表达式。

      如果您手动对问题进行评分,这正是您将(隐含地)做的事情——您将寻找一个正确但也属于可接受类别的答案。

      【讨论】:

        【解决方案5】:

        在数学评估软件中执行此操作的常用方法是允许问题设置者指定正确答案中不允许的表达式/字符串。

        如果您碰巧对现有软件感兴趣,可以使用开源 Stack http://www.stack.bham.ac.uk/(或 MapleTA 等各种商业选项)。我怀疑你会遇到的大多数问题 Stack 也遇到过,所以即使你不想使用它,看看它是如何处理事情的也可能是有教育意义的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多