小选择题自动阅卷库

mcautograder的Python项目详细描述


多选自动加载器

Binder

这个存储库包含一个基于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"键。键值的说明如下:

KeyValue TypeValue 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:

  • 更改了测试文件的结构,使其更直观
  • 添加了文档字符串和更好的文档

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何通过jamod读取控制器的输入状态?   java Back bean方法在使用两个h的单一表单时未调用:selectonemenus和command button   mockitojava中的单元测试Mock继承方法   java在不传递到构造函数的情况下,将一个类的实例使用到另一个类中的最佳方法是什么   java Spring MVC:如何通过API在Dozer的toplevel字段中允许空值?   java hibernate到MSSQL服务器的连接被拒绝:连接   java动态调用现有变量   在java中扩展多个类的泛型   java使用JNA Ptrace获取linux中外部进程的信息?   eclipse获取Java项目中所有构建错误的最快方法是什么?   java将动态数组拆分为多个数组   java安卓:将json保存到sqlite   java获取最近时间Android   java如何为多对多关联编写HQL查询?   java Docker compose for mysql和spring应用程序拒绝访问   java查找数组(如果它是另一个数组的子集)   java如何在另一个具有相同数据类型参数的泛型类(或接口)中使用泛型类(或接口),而无需强制转换   Apache POI java。lang.NoClassDefFoundError:org/apache/commons/compress/utils/InputStreamStatistics   java使用Jackson将JSON反序列化为异构元素列表   使用MapReduce实现java规范化