MultipleChoiceProblems

From WeBWorK_wiki
Jump to navigation Jump to search
This article has been retained as a historical document. It is not up-to-date and the formatting may be lacking. Use the information herein with caution.

This problem has been replaced with three alternatives:

Multiple Choice Problems: PG Code Snippet

This code snippet shows the essential PG code to include a multiple-choice question in a problem.

For an example of a multiple choice problem in which the choices are graphs, see Example 1 of GraphsInTables

We give two examples here. The first uses old-style answer checkers; the second newer parser based code. Note that the functionality that is provided in either case is different; the latter is syntactically cleaner and simpler, but doesn't have the same range of functions provided by the first. See also the Pop Up Lists page.

Problem Techniques Index

With Old-Style Answer Checkers

PG problem file Explanation
DOCUMENT();  

loadMacros(
"PGstandard.pl",
"PGchoicemacros.pl",
);

Initialization: Include PGchoicemacros.pl in the list of loaded macro files.

$mc = new_multiple_choice();
$mc->qa(
"What is your favorite color?", 
"blue"
);
$mc->extra(
"red",
"green",
);
$mc->makeLast("none of the above");

Setup: Create a new multiple choice object with new_multiple_choice, and then store the question and correct answer with the qa method. Other answers are specified as a list of arguments to the extra method. To force an answer (either a new extra answer, or the correct answer) to appear last in the list of options, use the makeLast method. All other answers will be scrambled when the multiple choice problem is shown to students.

To make answers appear in a certain order (e.g., Yes followed by No and Maybe), use $mc->qa("question","Yes"); $mc->makeLast("Yes","No","Maybe"); and do not use extra( ) at all. Note that if we have a list of questions (and correct answers) it is easy to randomly pick one to display. For example, if we want to pick between the questions "How many legs do cats have?" and "How many legs to ostriches have?", we could use the following:

@quest = ("How many legs do cats have?",
     "How many legs to ostriches have?"); 
@ans = ("4","2"); 
$pick = random(0,1,1);
$mc->new_checkbox_multiple_choice();
$mc->qa($quest[$pick],$ans[$pick]);
$mc->makeLast("2","4","None of the above");

BEGIN_TEXT
\{ $mc->print_q() \}
$BR
\{ $mc->print_a() \}
END_TEXT

Main text: In the text section we print the question and answers.

$showPartialCorrectAnswers = 0;

ANS( radio_cmp( $mc->correct_ans() ) );

ENDDOCUMENT();

Answer Evaluation: In most cases we will want to set $showPartialCorrectAnswers to 0 (false) for multiple choice problems. Otherwise, students can use the feedback or the partial credit received to guess and check if their answers are correct. We grade the problem with radio_cmp.

With Newer Answer Checkers

PG problem file Explanation
DOCUMENT();  

loadMacros(
"PGstandard.pl",
"parserRadioButtons.pl",
);

Initialization: Include parserRadioButtons.pl in the list of loaded macro files. This allows use of radio buttons (all options are shown, with a select-one button in front of each). We could also use parserPopUp.pl instead, which would allow creation of a drop-down menu of options. This is noted below as well, and is documented separately on the Pop Up Lists page.

$mc = RadioButtons(
    [ "\( \sin(x) \)", "\( \tan(x) \)", "\( e^x \)", "None of these" ],
    "\( e^x \)",
    last => ["None of these"],
    labels => ["Sine", "Tangent", "Exponential", "None of these"] );

Setup: We create a radio button object with RadioButtons. The first argument is a reference to a list of options: ["Blue","Red",...], and the second is the correct answer, which needs to be one of the options. The last argument, last=>["None of these"], specifies an option (or comma separated list of options) to always display last. Since the list of answers contains math typeset by LaTeX, the labels option must be specified with a plain text substitute for display purposes. The labels can be set to A, B, C,... or 1, 2, 3,... by specifying labels => "ABC" or labels => "123".

To create a drop-down ("pop-up") option (having loaded parserPopUp.pl, of course), we use the same syntax:

  $mc = PopUp(
    [ "?", "Blue", "Red", "Green",
      "None of the above" ],
    "Blue" );

Note that in this case we should specify a generic non-answer as the first option, so that when the selector is displayed it does not automatically give the student an answer (which may or may not be correct).

BEGIN_TEXT
Which function has a horizontal asymptote?
$BR
\{ $mc->buttons() \}
END_TEXT

Main text: In the text section we print the question and radio buttons giving the answers. For a PopUp object, the call to create the menu of options is $mc->menu().

$showPartialCorrectAnswers = 0;

ANS( $mc->cmp() );

ENDDOCUMENT();

Answer Evaluation: In most cases we will want to set $showPartialCorrectAnswers to 0 (false) for multiple choice problems. Otherwise, students can use the feedback or the partial credit received to guess and check if their answers are correct. We grade the problem as expected.


Problem Techniques Index