提交 978ce20a 编写于 作者: M Mars Liu

document

上级 c9d9e435
...@@ -67,186 +67,13 @@ pip install -r requirement.txt ...@@ -67,186 +67,13 @@ pip install -r requirement.txt
## `知识节点` 的导出习题选项配置编辑 ## `知识节点` 的导出习题选项配置编辑
目前我们支持使用 markdown 语法直接编辑习题和各选项,或者编写习题代码和替换规则,让程序动态生成选项。 首先,我们添加前文中 export 指定的习题配置,例如在 `data/1.OceanBase初阶/7.查询数据` 下增加一个`hello.json`代码:
我们先介绍使用替换规则的习题如何编辑,在最后介绍 markdown 方式编写习题的方法。对于 Java 技能树,我们更*推荐*
使用 markdown 方式编写习题。
### 使用替换规则编写习题
首先,在知识节点下增加一个习题定义文件,例如 hello.json :
```json ```json
{ {
"type": "code_options", "type": "code_options",
"author": "刘鑫", "author": "刘鑫",
"source": "hello.sql", "source": "hello.md",
}
```
其中
* 类型现在仅支持 `code_options` 一种,保持不变即可
* author 是题目作者
* source 指题目定义,题目可以是源代码 + 替换规则的形式,也可以用 markdown 编写
我们先讨论使用替换规则定义题目的方式。
例如在 `data/1.OceanBase初阶/7.查询数据` 下增加一个`hello.sql`代码文件:
```sql
select 'hello';
```
其次,增加一个同名的选项配置文件`HelloWorld.json`,目前有三种配置规则
#### 单行替换规则
* 配置由`one_line`字段指定的单行替换字典
* 格式是:`"<源字符串>"`: [`"<替换字符串A>"`, `<替换字符串B>`,...],
* 其中每个 `"<源字符串>"` `/` `"<替换字符串A>"` 被生成为是一个替换选项
* 指定的配置应该能至少生成 `3+` 个替换选项
```json
{
"one_line": {
"select": ["print", "log", "echo"]
}
}
```
上面的替换规则会将代码替换成 3 个变种的代码:
```sql
print 'hello';
```
```java
log 'hello';
```
```java
echo 'hello';
```
这些变种代码将会作为技能树该知识点该代码选择题的选项。
#### 多行替换规则
* 配置由`multiline`字段指定的多行替换数组
* 数组的每个元素是一组替换规则,会整组被替换
例如:
假设我们有习题代码:
```sql
begin
update parent set children = children + $child
insert child(c select $child;
commit;
end
```
和变形规则
```json
{
"mulitiline": [{
"begin": "{",
"end": "}"
},
{
"commit": "save",
"begin": "try{",
"commit;": "",
"end": "}finally{\n\tsave;\n}"
},
{
"begin": "begin:",
"commit;": "",
"end": "finally: \tcommit;"
}]
```
上面的替换规则会将代码替换成 3 个变种的代码:
```sql
{
update parent set children = children + $child
insert child(c select $child;
commit;
}
```
```sql
try{
update parent set children = children + $child
insert child(c select $child;
}finally{
save;
}
```
```sql
begin:
update parent set children = children + $child
insert child(c select $child;
finally:
commit;
```
这些变种代码将会作为技能树该知识点该代码选择题的选项。
#### 预制的替换规则
* 配置由 `prepared` 字段制定的预制文件数组
* 数组每一个元素是一个预制的代码文件的路径文件名
例如:
```json
{
"prepared": [
"hello.1.sql",
"hello.2.sql",
"hello.3.sql"]
}
```
同样,该配置将支持将源代码生成3个变种代码
```sql
try{
update parent set children = children + $child
insert child(c select $child;
}finally{
save;
}
```
```sql
begin:
update parent set children = children + $child
insert child(c select $child;
finally:
commit;
```
### 使用 markdown 编写习题
如前内容,我们在知识节点下增加一个习题配置,例如在 `data/1.Java初阶/1.Java概述/1.什么是Java` 下增加一个`HelloWorld.json`代码:
```json
{
"type": "code_options",
"author": "刘鑫",
"source": "HelloWorld.md",
"exercise_id":"1190bb7834904da0b1f20915960714d5", "exercise_id":"1190bb7834904da0b1f20915960714d5",
"notebook_enable": true "notebook_enable": true
} }
...@@ -257,7 +84,7 @@ finally: ...@@ -257,7 +84,7 @@ finally:
# Hello World # Hello World
以下 `Hello World` 程序中,能够正确输出内容的是: 以下 `Hello World` 程序中,能够正确输出`hello`的是:
## 答案 ## 答案
...@@ -325,7 +152,6 @@ $code ...@@ -325,7 +152,6 @@ $code
end; end;
``` ```
```` ````
注意这里的代码中,有一个 `$code` 占位符,它在管道程序处理过程中,会替换成答案和个选项内容中的代码。 注意这里的代码中,有一个 `$code` 占位符,它在管道程序处理过程中,会替换成答案和个选项内容中的代码。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册