5.3 KiB
5.3 KiB
Multiple Choices and "I Don't Know" Option
New Question Type: multiple_choices
Purpose
Allows questions with multiple correct answers (e.g., "Select all that apply").
Format
{
"id": "q1",
"type": "multiple_choices",
"prompt": "Which of the following are mutable data types in Python? (Select all that apply)",
"choices": [
{ "key": "A", "text": "list" },
{ "key": "B", "text": "tuple" },
{ "key": "C", "text": "dict" },
{ "key": "D", "text": "str" },
{ "key": "E", "text": "set" }
],
"answer": ["A", "C", "E"],
"partialCredit": true,
"allowIDK": true,
"points": 10
}
Scoring
Partial Credit (default):
Score = (Correct Selections / Total Correct Answers) × Points
Example:
- Correct answers: A, C, E (3 total)
- Student selects: A, C (2 correct)
- Score = (2/3) × 10 = 6.67 points
All or Nothing:
"partialCredit": false
- Gets full points only if ALL correct answers selected
- Any mistake = 0 points
With Wrong Selections:
- Penalty for selecting incorrect options
- Score = max(0, (Correct - Wrong) / Total Correct × Points)
Example:
- Student selects: A, C, D (2 correct, 1 wrong)
- Score = (2 - 1) / 3 × 10 = 3.33 points
"I Don't Know" Option
Purpose
- Encourages honest assessment
- Prevents random guessing
- Better measures actual knowledge
- Can be scored differently (0 points vs penalty)
Availability
Automatically added to:
single_choicequestionsmultiple_choicesquestionstrue_falsequestions
Not added to:
essayquestions (can leave blank)code_simple/code_exercise(can leave blank)
Format
Enable (default):
{
"type": "single_choice",
"allowIDK": true,
"prompt": "What is...?",
...
}
Disable:
{
"type": "single_choice",
"allowIDK": false,
"prompt": "What is...?",
...
}
UI Behavior
Single Choice:
○ A. Option A
○ B. Option B
○ C. Option C
○ ? I don't know
Multiple Choices:
☐ A. Option A
☐ B. Option B
☐ C. Option C
☐ ? I don't know (if checked, clears other selections)
True/False:
○ True
○ False
○ I don't know
Scoring Rules
"I don't know" selected:
- Treated as incorrect (0 points)
- NOT penalized (better than guessing wrong)
- Honest indicator of knowledge gaps
Comparison:
- Wrong guess: 0 points + false confidence
- "I don't know": 0 points + honest gap identification
Complete Examples
Example 1: Single Choice with IDK
{
"id": "q1",
"type": "single_choice",
"prompt": "Which decorator is used for static methods?",
"choices": [
{ "key": "A", "text": "@staticmethod" },
{ "key": "B", "text": "@classmethod" },
{ "key": "C", "text": "@property" }
],
"answer": "A",
"allowIDK": true,
"points": 5
}
Possible responses:
- "A" → 5 points (correct)
- "B" or "C" → 0 points (incorrect)
- "IDK" → 0 points (honest)
Example 2: Multiple Choices with Partial Credit
{
"id": "q2",
"type": "multiple_choices",
"prompt": "Which are valid Python keywords? (Select all that apply)",
"choices": [
{ "key": "A", "text": "class" },
{ "key": "B", "text": "function" },
{ "key": "C", "text": "import" },
{ "key": "D", "text": "include" },
{ "key": "E", "text": "def" }
],
"answer": ["A", "C", "E"],
"partialCredit": true,
"allowIDK": true,
"points": 9
}
Possible responses:
- ["A", "C", "E"] → 9 points (all correct)
- ["A", "C"] → 6 points (2/3 correct with partial credit)
- ["A", "C", "D"] → 3 points (2 correct - 1 wrong)
- ["IDK"] → 0 points (honest)
Example 3: True/False with IDK
{
"id": "q3",
"type": "true_false",
"prompt": "Python supports tail call optimization.",
"answer": false,
"allowIDK": true,
"points": 3
}
Possible responses:
- false → 3 points (correct)
- true → 0 points (incorrect)
- "IDK" → 0 points (honest)
Example 4: Disable IDK (Force Answer)
{
"id": "q4",
"type": "single_choice",
"prompt": "What is 2 + 2?",
"choices": [
{ "key": "A", "text": "3" },
{ "key": "B", "text": "4" },
{ "key": "C", "text": "5" }
],
"answer": "B",
"allowIDK": false,
"points": 2
}
UI shows only A, B, C (no IDK option)
Answer Format
Response for single_choice
{
"questionId": "q1",
"response": "A"
}
// or
{
"questionId": "q1",
"response": "IDK"
}
Response for multiple_choices
{
"questionId": "q2",
"response": ["A", "C", "E"]
}
// or
{
"questionId": "q2",
"response": ["IDK"]
}
Response for true_false
{
"questionId": "q3",
"response": true
}
// or
{
"questionId": "q3",
"response": "IDK"
}
Benefits
For Learners:
- Honest self-assessment
- Identify knowledge gaps
- Avoid false confidence from lucky guesses
- Better learning outcome tracking
For Instructors:
- Clearer picture of student knowledge
- Identify commonly unknown topics
- Better curriculum adjustment
- More accurate assessment
Implementation Notes
- IDK option rendered in UI automatically when
allowIDKis true - Selecting IDK clears any other selections (for multiple_choices)
- Scoring treats IDK as incorrect (0 points)
- Analytics can track IDK rate per question
- High IDK rate = topic needs more coverage