# 练习题详述

## MagicFrame

MagicFrame是学习者作答的一个独立环境，是练习题的载体，可以使用多种编程语言（主要是Python和R），可以放在某篇讲义中，也可以在教室发布作业或考试时使用。

![展开的MagicFrame](https://692440195-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LE8VNeRaUjb1d4psfxi%2F-LEHkFz-whny6Z2VTNei%2F-LEHkVs-6sVI6PIZtL4y%2Fmagicframe.png?alt=media\&token=d91b497f-b52b-48d7-9c6d-7049fdc7f1a1)

## 类型

在保证设计的练习题专业的前提下，为了不丢失学习的趣味性，我们希望研发出多种多样练习题类型，可以在未来基于MagicFrame不断进行题型扩展。目前的练习题类型主要包括：

* 选择题，包括单选和多选
* 填空题，需要编程
* 建模题，需要用到机器学习相关知识
* 排序题（正在开发）

## 嗨客挑战

嗨客挑战是一个具体的实战项目，它包含了多个具有前后关联的练习题，它的设计来源于对真实项目的多层拆分，拆分出的各个部分作为练习题设计的参考。嗨客挑战将成为数据嗨客一个特殊的板块，不断满足学习者往更难更深入的部分进行探索的需求。

## 体量

1. 每一个课程至少包含 **200** 道练习题，其中放在讲义中的练习题不少于 **50** 道，且不超过整个课程题目数量的一半（需要剩余大量的题用于布置作业及考试）
2. 每一章节至少包含 **10** 道练习题
3. 嗨客挑战至少包含 **5** 道练习题
4. 每个知识点至少包含 **5** 道练习题
5. 各个题型数量分布均匀

## 组成部分

习题统一通过[数据嗨客OAM管理系统](http://hackdata.cn/oam/)进行录入，以下列出多个类型的共有部分或接口，各类型独有的组成部分将在后面几个章节详述：

* **习题名称**，在讲义中将不显示习题名称，只在作业或考试中显示习题名称
* **习题权限**
  * 平台/系统，不能用于作业或者考试
  * 公开，可用于作业或者考试
  * 私人，与数据嗨客账号绑定，只能由该账号使用
* **选择题型**
* **标签**，为便于练习题的组织和管理，必须对每一道题打精准的标签
* **题目说明**，即题干部分
* **上传图片**，将本地图片上传到数据嗨客服务器，允许在任何可输入Markdown的位置调用
* **备注**

## 设计原则

尽管不同的出题人在文字或代码上风格迥异，但是为保证数据嗨客所有练习题的专业性，并尽最大可能保证练习题的风格统一，避免练习者受到文字或者代码风格的干扰，同时方便教学研发管理员对练习题进行系统管理，所有练习题的设计务必遵循以下原则：

### 习题名称

如同新闻标题，习题名称也应大致遵循以下两条标准（后者稍弱）：

* 习题名称能让人一眼能明白这道题的内容
* 习题名称具有一定的吸引力

与课程直接关联的练习题（目前绝大多数题与课程直接关联），其习题名称应包含课程名称与考察内容两个信息，为便于检索以及后续发布作业及考试，习题名称组成结构&#x4E3A;**“课程名称-考察内容”**，考察内容可以是具体的操作内容“选取DataFrame列”，或者是知识点“索引操作”，完整习题名称如“Pandas数据分析-选取DataFrame列”。

### 题目说明

* 在题目说明中应把已知条件、需要练习者作答部分描述清楚，使用关键&#x5B57;**“请”**&#x5F00;头的句子告知练习者应作答的内容
* 语言精练，不应出现任何有歧义的句子
* **应该尽量避免下列语文中的常见错误**

  ```
  用词不当
  成分残缺
  搭配不当
  语序颠倒
  结构混乱（句式杂糅）
  指代不明
  表意不明 
  重复累赘
  分类不当（概念不清）
  前后矛盾
  不合事理
  不合逻辑
  ```

### 标签

标签务必添加课程名称、知识点名称，以便于后续对练习者进行完整画像

### Markdown

使用Markdown撰写时，需要遵循下表的标准（部分语法不便于在本说明文档中渲染）

| **内容**             | **语法**                      | **渲染结果**              |
| ------------------ | --------------------------- | --------------------- |
| 变量名、函数、函数参数、类等代码片段 | \`print("test")\`           | `print("test")`       |
| 列名                 | \`'house\_price'\`          | `'house_price'`       |
| 多行代码               | \`\`\`python    \`\`\`      |                       |
| 文件名                | \*data.csv\*                | *data.csv*            |
| 工具包（无须高亮）          | Pandas                      | Pandas                |
| 正误判定目标提示           | \*\*正误判定变量：\`variable\`\*\* | **正误判定变量：`variable`** |
| 行内数学符号及公式          | $x$                         |                       |
| 行间公式               | $$\sum\_{i=1}^n{x^2}$$      |                       |

### 备注

在这一部分明确展示该练习题是否在课程练习题以及是否需要对代码进行判定等信息。使用中文逗号`，`分割多个信息：

| **使用情形**                  | **备注内容** |
| ------------------------- | -------- |
| 在课程中使用了该练习题               | 在课程中使用   |
| 留作今后作业或者考试使用              | 未在课程中使用  |
| 不便于判断                     | 不做判断     |
| 该题由于某个原因不能使用（目前还不支持删除练习题） | 作废       |

## 分数设置

* 选择题 5分
* 填空题
  * 低难度 5分
  * 中难度 10分
  * 高难度 20分
* 建模题 30分

{% hint style="info" %}
**分数设置接口**

目前选择题和填空题只能在发布考试时指定分数（在OAM录入时，无设置分数接口）
{% endhint %}

## 上线流程

“上线”指已经通过后台录入、线上审核等过程，可以在讲义、作业、考试中直接使用。上线流程大致包含以下过程：

1. 线下设计，若之后案例运行环境与练习题运行环境一致后，可在案例模块中进行设计
2. 线下运行通过
3. 通过OAM录入
4. 审核，由数据嗨客管理人员进行审核
5. 审核通过并上线，否则进行调整并重复步骤4，直到审核通过

\\

\\
