Moodle嵌入式完形NUMERICAL题:带随机变量与容差的设置咨询
在Moodle中设置带随机变量与容差的嵌入式完形数值题的解决方案
需求:设置一道依赖随机变量且允许容差的嵌入式完形NUMERICAL题型。尝试设置:问题内容为
What is #var1 divided by PI? {1:NUMERICAL:=#ans:0.1},通过WIRIS生成var1=random(10,100)并定义ans=var1/Pi_,但语法报错提示答案必须是固定数值;SHORTANSWER题型支持#ans但无法添加容差。询问是否可行,以及除Calculated题型外的替代方案(因含多个依赖同一随机变量的子问题,不想用Calculated)。
核心结论
Moodle的嵌入式完形(Cloze)题型中的NUMERICAL子题型不支持直接通过#ans这类变量引用加容差,因为它要求答案必须是固定数值或可直接计算的表达式,不能是预定义的变量别名。但有以下实用替代方案:
替代方案
1. 直接在NUMERICAL子题型中内嵌计算表达式
无需单独定义ans变量,直接将计算逻辑写进NUMERICAL的答案位置,同时指定容差:
What is #var1 divided by PI? {1:NUMERICAL:=#var1/Pi_:0.1}
- 原理:WIRIS随机数生成器会先计算
var1的值,再实时计算#var1/Pi_的结果,同时识别:0.1作为允许的容差范围,完全满足需求。 - 多子问题适配:如果有多个依赖
var1的子问题,每个子问题都可以用同样的方式内嵌表达式并设置独立容差:What is #var1 divided by PI? {1:NUMERICAL:=#var1/Pi_:0.1} What is #var1 multiplied by 2? {2:NUMERICAL:=#var1*2:0.05} What is the square of #var1? {3:NUMERICAL:=#var1^2:1}
2. 为SHORTANSWER题型添加自定义容差评分逻辑
如果更倾向用SHORTANSWER题型,可以通过Moodle的高级评分方法实现容差判断:
- 步骤1:在WIRIS中生成
var1并定义ans=var1/Pi_,问题内容写为{1:SHORTANSWER:=#ans} - 步骤2:进入问题的「评分设置」,选择「高级」选项
- 选项A:使用正则表达式匹配数值范围。例如,先计算出
ans的上下限(如ans-0.1和ans+0.1),编写正则匹配该区间内的数值(注意处理小数位数) - 选项B:使用自定义PHP评分脚本,直接判断输入值是否在
$ans - 0.1到$ans + 0.1之间,符合则给满分
- 选项A:使用正则表达式匹配数值范围。例如,先计算出
3. 使用WIRIS内置评分规则(进阶)
如果使用WIRIS公式编辑器的扩展功能,可以直接在答案中设置容差逻辑:
在WIRIS中定义ans = var1 / Pi_,然后在NUMERICAL子题型的答案位置使用WIRIS的评分函数,例如{1:NUMERICAL:=wirisscore(ans, 0.1)}(具体语法需参考WIRIS与Moodle集成的官方文档)
内容的提问来源于stack exchange,提问作者Kristiaan
相关产品推荐
相关产品推荐

