Moodle多项选择题评分——全答对才给分

电子专业 徐 自远 1123℃

【Moodle多项选择题评分——全答对才给分】

Moodle的quiz模块支持各种题型,其中的多项选择题是以设置选项的“成绩”字段来统计的。如果在答题时选择了部分正确答案,该题还是会得分。有网友提出在设置题目时,给错误的答案的“成绩”字须设置相应的负值,来达到目的,比如A:50%,B:50%,C:-50%,D:-50%;这样貌似学习者只要都做选择,即可达到目的,这个前提要在学习者都将对与错的答案都选择时才能做抵销,没有解决少选,错选问题。
   官网上虽有安装新的插件来实现这种需求的问题类型(附于后),但要新建问题,对于题库中已存在的问题,或是通过其它格式(如gift)导入的问题,似乎没看到有转换的方法,可能在官网讨论区中有其解决方法。如果要在正式场合使用,请按官网上的路子走比较好一些。
   最后决定直接到代码里去改动。用记事本给question_multichoice_qtype类的grade_responses方法补上了几句代码,达到Moodle测试中多项选择题多选、少选、错选、不选都不得分的问题。简记于此:
文件路径:moodle/question/type/multichoice/questiontype.php

   function grade_responses(&$question, &$state, $cmoptions) {
       $state->raw_grade = 0;       
       if($question->options->single) {
           $response = reset($state->responses);
           if ($response) {
               $state->raw_grade = $question->options->answers[$response]->fraction;
           }
       } else {               
               //lltang:先计算该题正确答案的个数
               $tmc2=0;
               foreach ($question->options->answers as $answer) {
                   if($answer->fraction>0)$tmc2++;
               }
               $tmc=0;
               //end lltang
              
           foreach ($state->responses as $response) {
              
               if ($response) {
                   $state->raw_grade += $question->options->answers[$response]->fraction;
                  
                   //lltang:考生选择的答案中正确答案的个数
                   if($question->options->answers[$response]->fraction>0)$tmc++;
                   else $tmc=-1;
                   //end lltang
               }
           }
          
           //lltang:如果考生选择的正确答案个数与问题的正确答案个数不符,即给0分。
           if($tmc!=$tmc2)$state->raw_grade=0;
           //end lltang
       }
                      
              
                      
       // Make sure we don’t assign negative or too high marks
       $state->raw_grade = min(max((float) $state->raw_grade,
           0.0), 1.0) * $question->maxgrade;
                                              
       // Apply the penalty for this attempt
       $state->penalty = $question->penalty * $question->maxgrade;

       // mark the state as graded
       $state->event = ($state->event ==  QUESTION_EVENTCLOSE) ? QUESTION_EVENTCLOSEANDGRADE : QUESTION_EVENTGRADE;

       return true;
   }

小记:虽说Moodle2在代码上做了大幅度的改动,但感觉还是很乱,不够清晰。

简单测试了一回,截图如下:
题目:
1480407496-3995-67532f7cga3d7b4616cbfamp690

全答对:
1480407496-4262-67532f7cga3d7b889bdb2amp690

错选:
1480407498-6697-67532f7cga3d7c09a438camp690

漏选
1480407496-3045-67532f7cga3d7caa358e4amp690

官网上提供的解决方法:
这个问题在官网上Bug是:http://tracker.moodle.org/browse/CONTRIB/component/10704
解决方法是添加新的问题类型,叫做:All-or-nothing multiple choice,1.9之后的版本有效。地址:http://moodle.org/mod/data/view.php?d=13&rid=4014&filter=1
主要也是修改了question_multichoice_qtype类中的compare_responses,get_correct_responses,grade_responses这几个方法。

使用过程如下:
1、下载压缩包multichoiceset.zip。地址:http://download.moodle.org/plugins/question/type/multichoiceset.zip
(Moodle2.0,19.6k;moodle1.9的另见下载:http://download.moodle.org/plugins19/question/type/multichoiceset.zip
2、将该压缩文件解压到Moodle安装目录下的question/type
3、管理员登录,进行插件的更新。
4、进入课程的题库中新建试题,可以发现有一种新的类型,叫做“All-or-Nothing Multiple Choice”。新建这种类型的问题。
5、这个问题的内容与多项选择题问题填写的内容是基本一样的,不同之处在于Grade处不是填百分比了,而只有正确/错误(incorrect/Correct)的选择。

转载请注明:徐自远的乱七八糟小站 » Moodle多项选择题评分——全答对才给分

喜欢 (1)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号