Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CSDN 技术社区
skill_tree_web
提交
107c9782
S
skill_tree_web
项目概览
CSDN 技术社区
/
skill_tree_web
通知
9
Star
9
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
skill_tree_web
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
107c9782
编写于
11月 02, 2021
作者:
CSDN-Ada助手
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update README.md
上级
e36e486a
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
358 addition
and
11 deletion
+358
-11
README.md
README.md
+358
-11
未找到文件。
README.md
浏览文件 @
107c9782
...
@@ -71,13 +71,27 @@ pip install -r requirement.txt
...
@@ -71,13 +71,27 @@ pip install -r requirement.txt
## `知识节点` 的导出习题选项配置编辑
## `知识节点` 的导出习题选项配置编辑
首先,在知识节点下增加一个习题代码,例如在
`data/1.web初阶/1.前端基础/1.客户端`
下增加一个
`HelloWorld.
web
`
代码:
首先,在知识节点下增加一个习题代码,例如在
`data/1.web初阶/1.前端基础/1.客户端`
下增加一个
`HelloWorld.
html
`
代码:
```
web
```
web
// TODO
<html>
<body>
<head>
<title>just a test</title>
</head>
<p id="test">这是一个测试段落。</p>
<script>
document.write(Date());
document.getElementById("test").innerHTML = "你好,csdn!";
</script>
</body>
</html>
```
```
其次,增加一个同名的选项配置文件
`HelloWorld.json`
,目前有
两
种配置规则
其次,增加一个同名的选项配置文件
`HelloWorld.json`
,目前有
三
种配置规则
**单行替换规则**
:
**单行替换规则**
:
...
@@ -88,7 +102,9 @@ pip install -r requirement.txt
...
@@ -88,7 +102,9 @@ pip install -r requirement.txt
```
json
```
json
{
{
//
TODO
"one_line"
:
{
"document.write"
:
[
"document.print"
,
"document.out"
,
"document.printf"
]
}
}
}
```
```
...
@@ -96,17 +112,59 @@ pip install -r requirement.txt
...
@@ -96,17 +112,59 @@ pip install -r requirement.txt
```
html
```
html
// 变种代码1
// 变种代码1
// TODO
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
print
(
Date
());
document
.
getElementById
(
"
test
"
).
innerHTML
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
```
```
html
```
html
// 变种代码2
// 变种代码2
// TODO
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
out
(
Date
());
document
.
getElementById
(
"
test
"
).
innerHTML
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
```
```
html
```
html
// 变种代码3
// 变种代码3
// TODO
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
printf
(
Date
());
document
.
getElementById
(
"
test
"
).
innerHTML
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
```
这些变种代码将会作为技能树该知识点该代码选择题的选项。
这些变种代码将会作为技能树该知识点该代码选择题的选项。
...
@@ -120,7 +178,17 @@ pip install -r requirement.txt
...
@@ -120,7 +178,17 @@ pip install -r requirement.txt
```
json
```
json
{
{
//
TODO
"mulitiline"
:
[{
"<script>"
:
"<js>"
,
"Date()"
:
"date()"
},
{
"document.write"
:
"document.printf"
,
"<p id="
:
"<p class="
},
{
"innerHTML"
:
"value"
}]
}
}
```
```
...
@@ -128,19 +196,298 @@ pip install -r requirement.txt
...
@@ -128,19 +196,298 @@ pip install -r requirement.txt
```
html
```
html
// 变种代码1
// 变种代码1
// TODO
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<js>
document.write(date());
document.getElementById("test").innerHTML = "你好,csdn!";
</script>
</body>
</html>
```
```
html
// 变种代码2, 注意第2组替换规则,包含了两行替换
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
class=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
printf
(
Date
());
document
.
getElementById
(
"
test
"
).
innerHTML
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
```
html
// 变种代码3
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
write
(
Date
());
document
.
getElementById
(
"
test
"
).
value
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
## 预制的替换规则
*
配置由
`prepared`
字段制定的预制文件数组
*
数组每一个元素是一个预制的代码文件的路径文件名
例如:
```
json
{
"prepared"
:
[
"HelloWord.1.html"
,
"HelloWord.2.html"
,
"HelloWord.3.html"
]
}
```
同样,该配置将支持将源代码生成3个变种代码
```
html
// HelloWord.1.html
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<js>
document.write(date());
document.getElementById("test").innerHTML = "你好,csdn!";
</script>
</body>
</html>
```
```
```
html
```
html
// 变种代码2, 注意第2组替换规则,包含了两行替换
// 变种代码2, 注意第2组替换规则,包含了两行替换
// TODO
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
class=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
printf
(
Date
());
document
.
getElementById
(
"
test
"
).
innerHTML
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
```
```
html
```
html
// 变种代码3
// 变种代码3
// TODO
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
write
(
Date
());
document
.
getElementById
(
"
test
"
).
value
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
```
## 使用 markdown 编写习题
如前内容,我们在知识节点下增加一个习题配置,例如在
`data/1.web初阶/1.前端基础/1.客户端`
下增加一个
`HelloWorld.json`
代码:
```
json
{
"type"
:
"code_options"
,
"author"
:
"刘鑫"
,
"source"
:
"HelloWorld.md"
,
"exercise_id"
:
"1190bb7834904da0b1f20915960714d5"
,
"notebook_enable"
:
true
}
```
其中 type 字段目前都固定是
`code_options`
。exercise_id 可以不写,处理程序会自动填补这个数据。根据具体情况写好其它字段,注意这里 source 的文件名,我们指定了一个 markdwon 文件。现在我们新建一个 HelloWorld.md 并编辑为:
````
markdown
# Hello World
以下
`Hello World`
html代码中,能够正确显示预期内容的是:
## 答案
```
html
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
write
(
Date
());
document
.
getElementById
(
"
test
"
).
innerHTML
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
## 选项
### A
```
html
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<js>
document.write(date());
document.getElementById("test").innerHTML = "你好,csdn!";
</script>
</body>
</html>
```
### B
```
html
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
class=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
printf
(
Date
());
document
.
getElementById
(
"
test
"
).
innerHTML
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
### C
```
html
<html>
<body>
<head>
<title>
just a test
</title>
</head>
<p
id=
"test"
>
这是一个测试段落。
</p>
<script>
document
.
write
(
Date
());
document
.
getElementById
(
"
test
"
).
value
=
"
你好,csdn!
"
;
</script>
</body>
</html>
```
````
这是一个最基本的习题结构,它包含标题、答案、选项,注意这几个一级和二级标题必须填写正确,解释器会读取这几个标题。而选项的标题会被直接忽略掉,在
最终生成的习题中不包含选项的三级标题,所以这个标题可以用来标注一些编辑信息,例如“此选项没有关闭文件连接”,“类型错误”等等。
## 增强信息
为了编写习题和生成 notebook 的需要,markdown 解释器支持两种模板能力,如果我们在答案之前,有一个名为 aop 的二级标题:
````
markdown
## aop
### before
```
html
document.write("do something before");
```
### after
```
html
document.write("do something after");
```
````
那么在创建notebook的时候,before 会插入到源代码前一个单元,after 则会插入到源代码后。aop 章节可以只包含 before 或 after 中的某一个,也可以两个都有。
另一些情况下,我们可能需要把各个选项中重复的代码提取出来,建立一个模板,此时可以在答案之前建立一个名为 template 的二级标题,例如:
````
markdwon
## template
```html
<html>
<body>
<head>
<title>just a test</title>
</head>
// 下面的 code 占位符会被替换成答案和选项代码
$code
</body>
</html>
```
````
注意这里的代码中,有一个
`$code`
占位符,它在管道程序处理过程中,会替换成答案和个选项内容中的代码。
在后续的数据处理流程中,markdown 会被编译为 prepared 类型的习题。
## 技能树合成
## 技能树合成
在根目录下执行
`python main.py`
会合成技能树文件,合成的技能树文件:
`data/tree.json`
在根目录下执行
`python main.py`
会合成技能树文件,合成的技能树文件:
`data/tree.json`
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录