小选择题自动阅卷库
mcautograder的Python项目详细描述
多选自动加载器
这个存储库包含一个基于python的小选择题自动阅卷器,供jupyter笔记本使用。它应该与每个任务打包在一起,以便更容易在第三方服务器上使用,例如mybinder。
安装
您可以使用pip安装mcautograder
。
pip install mcautograder
用法
要使用autograder,请导入mcautograder
包,并确保tests file与笔记本位于同一目录中。加载笔记本依赖项时,导入文件并通过创建Notebook
类的实例来初始化分级器:
importmcautogradergrader=mcautograder.Notebook()
autpgrader自动假设测试文件存储为"./.tests.py"
。更多详细信息below。
如果你想让autograder给问题打分,请确保在你的Notebook
调用中设置scored=True
。1的默认行为是允许学生提交答案,直到他们得到正确的答案。如果是这种情况,当学生达到上限时,检查单元格将抛出一个AssertionError
,因为他们已经达到了重考上限。
下面给出了一个例子,要求记分笔记本的重考上限为5。
grader=Notebook(scored=True,max_attempts=5)
要使用自动阅卷器检查答案,让学生将答案分配给笔记本中的变量;这些答案可以是长度为1的字符串或单位数整数。然后调用Notebook.check()
函数;第一个参数应该是测试文件中的问题标识符,第二个参数应该是学生创建的变量。
my_answer="A"grader.check("q1",my_answer)
如果学生的响应与测试文件匹配,则将打印Correct.
;否则,将打印Try again.
。如果学生输入了一个无效的响应(例如float
,回答>;1个字符,点击“重做上限”),评分者将抛出一个AssertionError
,并显示一条描述性消息。
若要在已评分的自动加载器上获得分数,只需调用Notebook.score()
:
grader.score()
输出将包含从可能的分数中获得的分数和百分比。
有关autograder的更具描述性的介绍,请启动我们的Binder。
测试
autograder依赖一个测试文件来获取问题的答案。在这个repo中,文件是tests.py
,并且是公共的;实际上,我通常将答案作为隐藏文件.tests.py
分发。这里是不隐藏的,所以你可以细读它的结构和内容。
默认情况下,Notebook
构造函数假设您的测试位于文件.tests.py
中。如果有不同的首选位置,可以通过设置构造函数的tests
参数将路径传递给文件:
grader=Notebook(tests=SOME_OTHER_PATH)
在文件中,我们定义了一个变量answers
,它是一个包含字典的列表,每个字典代表一个问题。每个字典应该包含3个键:"identifier"
,"answer"
,还有,可选的,"points"
。如果你的作业是不计分的,你可以去掉"points"
键。键值的说明如下:
Key | Value Type | Value Description |
---|---|---|
^{ | ^{ | a unique question identifier |
^{ | ^{ | the answer to the question; specifications below |
^{ | ^{ | optional; the number of points assigned to that question |
答案必须长度为1(即单个字符串或单个数字整数)。autograder当前设置为在提交长度为1的答案时抛出一个AssertionError
,尽管我们打算稍后添加此功能。
下面给出了一个文件示例。
answers=[{"identifier":"q1","answer":3,"points":1,},{"identifier":"q2","answer":2,"points":2,},{"identifier":"q3","answer":"D","points":3,}]
标识符没有设置格式。这是因为当您在笔记本中调用标识符时,它会传递给Notebook.check()
。
分支
master
分支包含位于pypi上的mcautograder
的当前状态。dev
分支包含正在开发的mcautograder
的下一个版本。不要直接提交到master
分支。在dev
分支中进行提交,然后在upl之前pr到master
分支正在加载到Pypi。
更改日志
v0.0.6:
- 添加了状态序列化以防止死机内核重置笔记本
- 添加了
".tests.py"
作为Notebook
构造函数的默认参数值 - 为得分为0分的笔记本增加了
AssertionError
- 为不带
"points"
键的记事本标识符添加try/except语句
v0.0.5:
- 将
mcautograder.py
更改为notebook.py
,以减少混淆 - 将
max_retakes
参数更改为max_attempts
,以便更好地理解 - sphinx autodoc的upadted docstring格式
- 为setuptools添加了license字段
v0.0.4:
- 将实用程序移动到单独的文档文件中
v0.0.3:
- 更改了测试文件的结构,使其更直观
- 添加了文档字符串和更好的文档