1个稳定版本
1.0.0 | 2022年7月10日 |
---|
#351 in 模板引擎
25KB
299 行
morphius
morphius
允许用户随机化文档的顺序和内容,教师可以用它来生成不同顺序或每个问题有不同数字的测试。如果提供了答案,morphius将为每个最终测试生成一个答案键,以便于评分。
格式
morphius
处理以下特定格式的内容
问题
在 morphius
中,问题以以下格式表示
"|<q>问题内容</q>|"
代码 "|<q>"
和 "</q>|"
中的内容是问题内容。如果需要,问题将被重新排列,以在测试中创建不同的问题顺序,而模板中的其余内容保持在同一位置。这意味着如果模板中包含问题编号,则应该将这些编号放置在问题本身之外,以便在重新排列问题时保留正确的编号。
表达式
表达式用于给问题添加随机性
|<e>a+b</e>|
是一个示例表达式。为了进行处理,表达式必须放在问题的内部。表达式是数学表达式,可以包含变量,并在生成测试时评估为数字。变量代表每个生成的测试中单独选择的随机数。表达式中的变量是任何以字母开头,后跟可以包含字母、数字或下划线的字符序列的标识符。变量无需声明,并在生成时默认为介于0到99之间的整数。这些表达式允许使用数学,以在生成的测试中的数字之间创建特定的关系。使用 mexprp
crate 支持数学。变量的作用域是问题,因此您可以在不同的问题中使用相同的变量名,它们很可能具有不同的值(除非它们随机变为相同的值)。如果您想对可能的值范围有更精确的控制,可以声明变量。
变量声明
变量可以按照以下格式在问题的任何位置声明:
|<v>var_name: type = [min,max]</v>|
其中 var_name 是您的变量名,type 是 int 或 real,min 和 max 是代表变量值的下限和上限的整数。一个示例声明是 |<v>a: int = [0,99]</v>|
。这是任何未声明的变量的默认声明,因此包括此确切声明在您的代码中是不必要的。
答案
答案用于为每个测试生成答案键。当使用 process_with_answers
时,应包括每个问题的答案。它们应采用以下格式 |<a>Answer</a>|
并应直接位于问题的后面。答案中的变量与它们对应的问题的作用域相同,因此您可以在答案中使用表达式来根据问题中随机生成的变量计算答案。
示例
这里有一个简单的示例,您可以在 GitHub 仓库的 examples
文件夹中找到更多示例模板。
let template = "
|<q>This is a single question test. You must calculate the sum of two random numbers.
What is |<e>a</e>| + |<e>b</e>|?</q>|
|<a>The answer to this question is: |<e>a+b</e>|</a>|";
let doc = morphius::process_with_answers(template);
let tests = morphius::generate(&doc, 5, Some(1));
//Prints out the first test
println!("{}", tests[0].content);
//Prints out the answer key for the first test
println!("{}", tests[0].answers);
依赖关系
~7.5MB
~134K SLoC