pl-order-blocks元件¶
用于排列最初显示在_源区域_中的给定代码或文本块的元素。这些块可以移动到_解决方案区域_来构建问题的解决方案。在下面的示例中,源区域由标题“从此处拖动”表示,解决方案区域由标题“在此处构建您的解决方案”表示。
样品元素¶

question.html
<p>List all the even numbers in order:</p>
<pl-order-blocks answers-name="order-numbers">
<pl-answer correct="false">1</pl-answer>
<pl-answer correct="true">2</pl-answer>
<pl-answer correct="false">3</pl-answer>
<pl-answer correct="true">4</pl-answer>
</pl-order-blocks>
定制¶
| 属性 | 类型 | 默认 | 描述 |
|---|---|---|---|
allow-blank |
布尔 | 假 | 是否允许有空的解决方案区域。默认情况下,不会对没有放置块的空解决方案区域进行评分(格式无效)。 |
answers-name |
字符串 | — | 用于存储数据的变量名称。请注意,该属性在问题中必须是唯一的,即该属性的值不应在问题中重复。 |
code-language |
字符串 | — | 要使用的编程语言语法突出显示。仅在使用 format="code" 时可用。 |
display-blocks |
vertical 或 inline-wrap 或 inline-nowrap |
vertical |
vertical 垂直堆叠块,inline-wrap 和 inline-nowrap 将块定位在单行中,inline-wrap 根据需要将块包装到多行上,而 inline-nowrap 通过水平滚动强制所有块到单行上。 |
distractor-order |
"random" 或 "inherit" |
"inherit" |
控制干扰物是否与其关联的正确块一起打乱。 "random" 将每个正确的块及其干扰项(具有匹配 distractor-for 的块)一起洗牌。 "inherit" 按照 source-blocks-order 确定的顺序保留干扰项。不能与 source-blocks-order="random" 一起使用。当 "random" 与 source-blocks-order="alphabetized" 一起使用时,整个列表不会严格按字母顺序排列。 |
feedback |
"none"、"first-wrong" 或 "first-wrong-verbose" |
"none" |
学生在给出错误答案后收到的反馈程度。适用于 "dag" 或 "ranking" 分级模式。 "none"不会给出任何反馈。 "first-wrong" 将告诉学生答案中的哪个块是第一个不正确的。如果设置为 "first-wrong-verbose",如果第一个不正确的块是干扰物,则还将显示与该干扰物相关的任何反馈(请参阅 <pl-answer> 中的“干扰物反馈”) |
file-name |
字符串 | "user_code.py" |
将保存来自块的信息的文件的名称,以供外部分级机使用。 |
format |
"code" 或 "default" |
"default" |
如果此属性设置为 "code",则每个块的内容将用 <pl-code> 元素包装。 |
grading-method |
"ordered"、"unordered"、"ranking"、"dag"、"external" |
"ordered" |
使用的分级方法如下所述。 |
indentation |
布尔 | 假 | 启用解决方案区域中的缩进功能和预期缩进的分级(由 pl-answer 中的 indent 设置,如下所述)。 |
max-incorrect |
整数 | 查看描述 | 源区域中显示的错误答案的最大数量。错误答案是使用 <pl-answer correct="false"> 设置的。默认显示所有不正确的答案。 |
max-indent |
整数 | 4 | 解决方案区域中块的最大可能缩进深度。注意仅在 indentation 启用时适用。 |
min-incorrect |
整数 | 查看描述 | 源区域中显示的错误答案的最小数量。错误答案是使用 <pl-answer correct="false"> 设置的。默认显示所有不正确的答案。 |
partial-credit |
"none" 或 "lcs" |
"none" |
对于 "dag"、"ordered" 和 "ranking" 评分方法,您可以根据从学生解到某个正确解的 LCS 编辑距离,指定 "none" 表示无部分学分,或指定 "lcs" 表示部分学分。对于 "dag"、"ordered" 和 "ranking" 分级方法,partial-credit 默认为 "none"。评分方法 "unordered" 将始终分配部分学分。 |
solution-header |
字符串 | "Construct your solution here:" |
显示在解决方案区域开头的文本。 |
solution-placement |
"right" 或 "bottom" |
"right" |
"right" 显示并排对齐的源区域和解决方案区域。 "bottom" 显示源区域下方的解决方案区域。 |
source-blocks-order |
"random"、"ordered"、"alphabetized" 或 "random-sections" |
"alphabetized" |
源区域中块的顺序。请参阅下面的更多详细信息。 |
source-header |
字符串 | "Drag from here:" |
显示在源区域开头的文本。 |
weight |
整数 | 1 | 计算问题中所有元素的加权平均分数时使用的权重。 |
在 pl-order-blocks 元素中,每个元素必须是 pl-answer 或 pl-block-group(有关 pl-block-group 的详细信息,请参阅下面的详细信息)。 pl-block-group 中的每个元素都必须是 pl-answer。 pl-answer 元素指定每个块的内容,并且可以具有以下属性。标有* 的属性也可以应用于pl-block-group。
| 属性 | 类型 | 默认 | 描述 |
|---|---|---|---|
correct |
布尔 | 真实 | 指定答案块是否是问题的正确答案(并且应移至解决方案区域)。 |
depends* |
字符串 | — | 当 grading-method="dag" 时可选属性。用于指定块之间的有向无环图关系,块由它们的 tag 引用。例如,如果 depends="1,3" 对于特定块,则它在解决方案中的出现时间必须晚于带有 tag="1" 的块和带有 tag="3" 的块。如果 depends="1|3",则该块在解中的出现时间必须晚于带有 tag="1" 的块或带有 tag="3" 的块。 |
distractor-feedback |
字符串 | — | 可选属性,当 correct=false 时使用,指示给定块不正确或不应包含在解决方案中的原因。在对问题的所有尝试都用尽后,或者如果 feedback="first-wrong" 且提交的第一个错误行包含 distractor-feedback 时向学生显示。 |
distractor-for |
字符串 | — | correct=false 的块上的可选属性。用于在视觉上将干扰块与其相似的正确块分组,应与应在视觉上配对的块的 tag 属性相匹配。 |
final |
布尔 | — | 当 grading-method="dag" 和 | 用于表示可选块时,一个或多个 pl-answer 标签上需要为 true。 |
indent |
[-1, 4] | 中的整数-1 | 指定块的正确缩进级别。例如,2 表示该块应缩进两次,而 -1 表示该块忽略缩进。使用 indentation="true" 时,在任何需要分级缩进的块上设置 indent。省略 indent 相当于 -1。该属性仅在 indentation="true" 时可用。 |
ordering-feedback |
字符串 | — | grading-method="dag" 或 grading-method="ranking" 和 correct=true 时使用的可选属性。用于在该块相对于其他块放置在错误位置时提供特定反馈。提交后会向学生显示此反馈,以帮助澄清订购错误。 |
initially-placed |
布尔 | 假 | 可选属性仅允许在没有干扰因素的正确块中。使用时,该块最初会出现在拖放区中。 |
ranking |
正整数 | — | 当 grading-method="ranking" 时使用该属性并指定答案块的正确排名。例如,排名为 2 的区块应放置在排名为 1 的区块下方。当某些块的顺序不相关时,可以使用相同的排序。可以放置在任何位置的块不应具有 ranking 属性。 |
tag* |
字符串 | — | 可选属性。用于在声明哪些其他块依赖于该块或干扰该块时识别该块。 |
从已弃用的属性迁移¶
为了向后兼容,仍支持以下已弃用的属性:
| 旧语法 | 新语法 |
|---|---|
inline="true" |
display-blocks="inline-nowrap" |
inline="false" |
display-blocks="vertical" |
细节¶
不同的评分选项通过属性 grading-method 定义:
ordered:在此方法中,块的正确顺序由以下顺序定义: 正确答案(在pl-answer中定义)出现在 HTML 文件中。unordered:在此方法中,如果n是正确块的总数,则每个移动到解答区的正确块都给予1/n点,并且每个移动到解答区的错误块减去1/n点。最终得分至少为 0(学生不能仅通过移动错误答案而获得负分)。请注意,块的顺序并不重要。也就是说,接受解决方案区域内答案的任何排列。ranking:在此方法中,pl-answer选项的ranking属性用于检查答案排序。每个答案块 X 应具有一个小于或等于紧邻 X 的答案块的ranking整数。也就是说,所有答案块的ranking整数序列应形成_非严格递增_序列。如果n是答案总数,则每个正确排序的答案的价值为1/n,直到第一个错误排序的答案。dag:在此方法中,pl-answer选项的depends属性用于声明块之间的有向无环图关系,正确答案是该有向无环图的任何拓扑排序。如果使用pl-block-group元素将某些块分组,那么正确的答案是对证明的行进行拓扑排序,附加条件是每组的行必须连续列出(例如,当dag评分器用于数学证明时,这对于表达 按案例证明 很有用)。pl-block-group元素内的块可能仅依赖于同一pl-block-group内的块或被同一pl-block-group内的块依赖,并且pl-block-group元素可以被赋予它们自己的tag和depends属性,以便块可以依赖于整个组,或者组可以依赖于块或组。external:在此方法中,移动到解决方案区域的块将保存在file-name属性指定的文件中(默认user_code.py),并且将使用外部分级器检查代码的正确性。根据外部评分者评分代码逻辑,可以启用或禁用部分学分。pl-answer的属性correct仍可与min-incorrect和max-incorrect结合使用,仅用于显示目的,但不用于分级目的。对于此评分方法,pl-answer上仅允许使用correct和initially-placed属性。
通过属性 source-blocks-order 定义的源区域中块的不同顺序:
random:块被打乱。ordered:块按照它们在 HTML 文件中出现的顺序出现在源区域中。alphabetized:块根据其 HTML 内容按字母顺序排列。在块中包含 HTML 时要小心。例如,<b>cat</b>将出现在<i>bat</i>之前。random-sections:块被打乱,但干扰组始终出现在所有单独块之后。
可选块¶
此功能允许用户使用 dag 评分方法编写 pl-order-blocks 问题以获得多个正确的排序。这可以利用 dag 评分方法扩展现有问题,以包括可以在最终解决方案中包含或排除的块,同时仍然正确。您可以使用 | 运算符(例如 depends="A|B")来表示 depends 属性中的依赖关系之间的“或”关系。
Note
使用可选块时,每个正确的排序必须以标记为“final”的块结束。声明这些块的 pl-answer 标记必须将属性 final 设置为 true。
问题不能包含带有可选块的块组。
可选块示例¶

question.html
<p>Construct a python function that computes the sum of two numbers.</p>
<pl-order-blocks
answers-name="python-plus-equals"
grading-method="dag"
indentation="true"
format="code"
code-language="python"
>
<pl-answer correct="true" tag="1" depends="" indent="0">def my_sum(first, second):</pl-answer>
<pl-answer correct="true" tag="2" depends="1" indent="1">sum = 0</pl-answer>
<pl-answer correct="true" tag="3" depends="2" indent="1">sum += first</pl-answer>
<pl-answer correct="true" tag="4" depends="2" indent="1">sum += second</pl-answer>
<pl-answer correct="true" tag="5" depends="2" indent="1">sum += first + second</pl-answer>
<pl-answer correct="true" tag="6" depends="3,4 | 5" indent="1" final="true">return sum</pl-answer>
</pl-order-blocks>
示例实现¶
- [元素/orderBlocks]
- [元素/orderBlocksOrdered]
- [元素/orderBlocks代码]
- [元素/orderBlocksDag]
- [元素/orderBlocks按字母顺序排列]
- [元素/orderBlocksInline]
- [元素/orderBlocks可选]
- [演示/proofBlocks]
- [演示/自动评分器/python/orderBlocksRandomParams]
- [演示/自动评分器/python/orderBlocksAddNumpy]