综合案例:学生测试程序设计;;测试主要是为了检验学生在近段时期的学习成果,查看学生的学习状态,为老师提供教学分析依据。
测试形式:有笔试、口试、线上测试等,采用笔试的方法,各学生机会均等且相对客观,这是其他方法难以替代的。
考试类型:通常会设置为A卷、B卷、C卷、D卷等,进一步体现公平、公正的原则,一方面设置考试类型可以防止学生近距离作弊,保证学生成绩的公平,另一方面可以应对试卷泄漏等突发情况。
考试题型:有选择题、判断题、填空题、简答题和应用题等,通常情况下,一份测试试卷会包括多种题型,主要分为客观性试题和主观性试题。
;笔试局限性:学校每次测试,都需要事先进行试卷命题、复印试卷、回收试卷、评阅试卷等一系列工作。而且不同因素都可能会影响到测试的有效性、准确性、公平性等。给学校、教师、学生等带来了诸多不便。
线上测试优势:
帮助教师减轻出卷、印卷与阅卷的工作压力,减少传统笔试出卷方式和阅卷方式容易产生的错误。
能够将学生从规定时间、规定地点的传统测试形式中解放出来,大大提高测试效率。
能够大大减少印刷材料等资源的消耗。
考试流程:对于笔试和线上测试,其基本流程大致相同,流程如下。
出卷考试
阅卷统计成绩
;考试题型以判断题为例,其中题目数量为10道,考试类型分为A、B两卷,B卷的试卷题目格式与A卷的相同。
A、B两卷的测试范围相同(均是对Python的基础知识进行测试),题目的难易程度相同,且题型均为判断题。其不同点在于,A、B两卷的题目将会有所变化,A卷试卷题目格式如表所示。
;在测试时,除了需要所出的试卷外,还需要配置试卷对应的标准答案,以便于后续给学生提供一定的参考。
在本案例中,A、B两卷的标准答案存放在试卷答案文件夹中,B卷的试卷答案格式与A卷的相同。
A卷试卷答案格式如表所示。
;通过程序随机抽取试卷(A卷或B卷),将试卷中的10道判断题题目逐个展示,并提示学生输入对应题目的答案,最后通过将输入答案与标准答案进行匹配,计算该学生的成绩并添加到成绩单中。
Python基础的测试成绩单如表所示。
;根据上述的分析过程与思路,得到总体流程如图所示,主要包括以下步骤。
使用random模块生成随机整数,以获取学习币值。
定义试卷的抽取规则,并抽取试卷。
读取试卷,逐个打印题目,并提示学生进行作答。
定义试卷答案的获取规则,并获取标准答案。
计算成绩,并添加到成绩单中。
;;获取学习币值的具体过程如下。
导入所需要的random、csv和os模块。
使用def关键字定义learning_coin函数,因为骰子的数量为3,且在没有摇动骰子时,假设其点数为空,所以将参数numbers设置为3,参数points设置为None。
定义points列表用于存放骰子点数。
利用while循环,同时运用random模块中的randrange函数生成3个随机整数,整数所在范围为[1,7),并将这些整数添加到points列表中。
运用sum函数对骰子点数进行求和,并返回学习币值。
;抽取试卷的具体过程如下。
使用def关键字定义rule函数,其中参数为total(学习币值)。
使用os模块查看试卷文件夹中所有的试卷名。
使用if…elif…语句定义抽取试卷的规则。
使用open函数打开文件路径。
使用csv.reader函数读取CSV文件。
使用for循环将文件的全部内容存储到列表中,并返回试卷列表。
;;读取试卷的具体过程如下,运行结果如图所示。
调用Test_Paper类中的learning_coin函数获取学习币值。
调用rule函数抽取试卷。
打印学习币值和试卷内容。
;读取试卷的具体过程如下。
进行测试,使用input函数实现键盘输入自己的学号或名字等信息。
通过if…else…语句判断名字是否已经输入。
读取试卷后,所有的题目均被存放在列表中。
利用while循环逐个打印题目,并通过input函数提示学生输入答案。
采用if…else…语句判断输入格式是否正确。
格式输入正确时,将答案添加到自定义的answers列表中,并进入下一题。
当格式输入错误时,打印错误提示并重新作答。
使用try-except语句进行异常处理,最终打印题目并输入答案。
;读取试卷;获取标准答案的具体过程如下。
导入csv模块和os模块。
使用def关键字定义info_answer函数,其中参数为total(学习币值)。
使用os模块查看试卷答案文件夹下的文件名
使用if…elif…语句判断学习币值所在范围。
使用open函数打开试卷答案文件路径。
使用csv.DictReader函数读取CSV格式的答案文件。
使用for循环将文件中的答案存储到列表中,并返回答案列表。
;计算成绩的具体过程