多肢選択問題での「n者択m」

多肢選択問題での「n者択m」

- けん けん の投稿
返信数: 6
けんけんと申します。

Moodleさわりはじめて2日目です。

小テストの多肢選択問題で「五者択一」とかを作るのは簡単ですが、
例えば、回答が5個あって、その中から2つ正解しないと点数が
付かない(ようするに部分採点をしない)ようにする方法はあります
でしょうか?

問題:つぎの中から正解と思われるものを2つ選べ(配点10点)

回答1:正解
回答2:不正解
回答3:不正解
回答4:正解
回答3:不正解

上記の例で、回答1を選んだだけでは0点で、回答3も選んで10点と
なるようにしたい。

けん けん への返信

Re: 多肢選択問題での「n者択m」

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
けんけん様

> 例えば、回答が5個あって、その中から2つ正解しないと点数が
付かない(ようするに部分採点をしない)ようにする方法はあります
でしょうか?

「すべての正解を選択した場合のみ評点を与える」という設定はできないようです。
下記のプログラム修正で、けんけん様のご希望の動作を実現することができると思います。ウインク

修正対象プログラム: question/type/multichoice/questiontype.php
修正箇所: 374行目
修正内容:

[変更前]
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 {
foreach ($state->responses as $response) {
if ($response) {
$state->raw_grade += $question->options->answers[$response]->fraction;
}
}
}

[変更後]
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 {
foreach ($state->responses as $response) {
if ($response) {
$state->raw_grade += $question->options->answers[$response]->fraction;
}
}
}

// Avoid partial grading
if ($state->raw_grade != 1.0) {
$state->raw_grade = 0;
}

Mitsuhiro Yoshida への返信

Re: 多肢選択問題での「n者択m」

- けん けん の投稿
Mitsuhiro Yosidaさま

回答ありがとうございます。

>「すべての正解を選択した場合のみ評点を与える」という設定はできないようです。
>下記のプログラム修正で、けんけん様のご希望の動作を実現することができると思い
>ます。ウインク

>修正対象プログラム: question/type/multichoice/questiontype.php
>修正箇所: 374行目

なるほど!確かにできますね。
でも、ソース修正でしか対応できないということですね。
しかし、全部正解しないと評価されないというオプションは欲しいと思います。
要望って出せるんでしょうか?
それとも自分で修正して send_pr しないとだめ?

またしばらく触ってみて分からないことがあったら質問させていただきます。
ありがとうございました。

けん けん への返信

Re: 多肢選択問題での「n者択m」

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> 要望って出せるんでしょうか?

英語で記載する必要がありますが、下記ページで要望を出すことができます。

[Moodle Tracker]
http://tracker.moodle.org/

アカウントを作成して、「CREATE NEW ISSUE」をクリックした後、「Project: Moodle、
Issue Type: Improvement」を選択してください。
「Next >>」ボタンをクリックすると要望の詳細な入力欄が表示されます。
Mitsuhiro Yoshida への返信

Re: 多肢選択問題での「n者択m」

- Yuichi Saotome の投稿
五月女です.

学内の方から同様のご質問を受け,吉田さんご呈示のコードを参考に実装しました.
#BlackBoardでは,この問題形式が作れるそうです...複雑な
具体的には,下の図の様に多肢選択問題の編集画面に「部分正解不可」というオプションを追加しました.
一応ヘルプファイルも作成しました.(下図参照)
また,この改造はMOODLE_18_CVSの2008/02/07版に対して実装しています.

コードに対する変更点
簡単なコメント
添付 ss.jpg
Yuichi Saotome への返信

Re: 多肢選択問題での「n者択m」

- T N の投稿

だいぶ古いので無理からぬ事とは思いますが、「コードに対する変更点」と「簡単なコメント」がリンク切れを起こしているようです。是非参考にさせていただき、改造をしてみたいので、改めて開示していただけないでしょうか。お手数掛けますが、よろしくお願い申し上げます。

T N への返信

Re: 多肢選択問題での「n者択m」

- T N の投稿

Avoid partial gradingのみだと、不正解選択肢をいちいち負に設定しなければならず面倒だ、という指摘をユーザから受けたので、以下の様に

/moodle/question/type/multichoice/questiontype.php を編集してみました。すなわち、複数回答を許可した場合、0を負にし、和が1の場合のみ正解とする、ということです。これで、ユーザの要求をすべて満たすのかどうか、よくわかりませんが、「コードに対する変更点」を推測してみました。なお、行番号は、Moodle 2.0.2 に対応しています。

373     function grade_responses(&$question, &$state, $cmoptions) {
374         $state->raw_grade = 0;
375         if($question->options->single) {
376             $response = reset($state->responses);
377             if ($response) {
378                 $state->raw_grade = $question->options->answers[$response]->fraction;
379             }
380         } else {
381             foreach ($state->responses as $response) {
382                 if ($response) {
383 // Set to negative valuses
384                   if (((float) $question->options->answers[$response]->fraction) === 0.0) {
385                     (float) $question->options->answers[$response]->fraction = -0.0001;
386                   }
387                     $state->raw_grade += $question->options->answers[$response]->fraction;
388                 }
389             }
390         }
391 //  Avoid partial grading
392         if ($state->raw_grade != 1.0) { $state->raw_grade = 0; }

評点平均: お役立ち度: ★★★★★★★ (1)