跳转至

pl-order-blocks元件

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

样品元素

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 verticalinline-wrapinline-nowrap vertical vertical 垂直堆叠块,inline-wrapinline-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-answerpl-block-group(有关 pl-block-group 的详细信息,请参阅下面的详细信息)。 pl-block-group 中的每个元素都必须是 pl-answerpl-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 元素可以被赋予它们自己的 tagdepends 属性,以便块可以依赖于整个组,或者组可以依赖于块或组。
  • external:在此方法中,移动到解决方案区域的块将保存在file-name属性指定的文件中(默认user_code.py),并且将使用外部分级器检查代码的正确性。根据外部评分者评分代码逻辑,可以启用或禁用部分学分。 pl-answer 的属性 correct 仍可与 min-incorrectmax-incorrect 结合使用,仅用于显示目的,但不用于分级目的。对于此评分方法,pl-answer 上仅允许使用 correctinitially-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。 问题不能包含带有可选块的块组。

可选块示例

带有可选行的 pl-order-blocks 元素的屏幕截图

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]