170 lines
5.0 KiB
Markdown
170 lines
5.0 KiB
Markdown
# New Exam Created: Python Easy 15 Questions
|
||
|
||
## Summary
|
||
|
||
✅ **User data cleared successfully**
|
||
- Removed all data from `data/attempts/`
|
||
- Removed all data from `data/output/`
|
||
- Removed all data from `data/progress/`
|
||
- Reset manifest users to empty object
|
||
|
||
✅ **New exam created: `python-easy-15q-v1`**
|
||
|
||
## Exam Details
|
||
|
||
- **Exam ID:** `python-easy-15q-v1`
|
||
- **Title:** Python Fundamentals - Easy Level (15 Questions)
|
||
- **Subject:** Python
|
||
- **Difficulty:** Beginner (Easy)
|
||
- **Duration:** 30 minutes
|
||
- **Passing Score:** 70%
|
||
- **Total Points:** 95 points
|
||
- **Total Questions:** 15
|
||
|
||
## Question Type Breakdown
|
||
|
||
| Type | Count | Total Points |
|
||
|------|-------|--------------|
|
||
| single_choice | 6 | 30 points (5 each) |
|
||
| true_false | 5 | 25 points (5 each) |
|
||
| multiple_choices | 4 | 40 points (10 each) |
|
||
|
||
## Question List
|
||
|
||
### Section 1: Python Basics (5 questions)
|
||
|
||
1. **[Single Choice, 5 pts]** What is the correct way to create a variable in Python?
|
||
- Answer: B (x = 5)
|
||
|
||
2. **[True/False, 5 pts]** Python is a case-sensitive language.
|
||
- Answer: True
|
||
|
||
3. **[Multiple Choices, 10 pts]** Which of the following are valid Python data types?
|
||
- Answers: A (int), C (float), D (bool)
|
||
- Partial credit enabled
|
||
|
||
4. **[Single Choice, 5 pts]** Which keyword is used to define a function in Python?
|
||
- Answer: B (def)
|
||
|
||
5. **[True/False, 5 pts]** In Python, indentation is used to define code blocks.
|
||
- Answer: True
|
||
|
||
### Section 2: Data Structures (5 questions)
|
||
|
||
6. **[Multiple Choices, 10 pts]** Which of the following are mutable data structures in Python?
|
||
- Answers: A (list), C (dict), D (set)
|
||
- Partial credit enabled
|
||
|
||
7. **[Single Choice, 5 pts]** How do you create an empty list in Python?
|
||
- Answer: B (list = [])
|
||
|
||
8. **[True/False, 5 pts]** A tuple in Python can be modified after creation.
|
||
- Answer: False
|
||
|
||
9. **[Single Choice, 5 pts]** What is the output of: print(type([1, 2, 3]))
|
||
- Answer: B (<class 'list'>)
|
||
|
||
10. **[Multiple Choices, 10 pts]** Which methods can be used to add elements to a list?
|
||
- Answers: A (append()), C (insert()), D (extend())
|
||
- Partial credit enabled
|
||
|
||
### Section 3: Control Flow (5 questions)
|
||
|
||
11. **[True/False, 5 pts]** The 'elif' keyword in Python is used for else-if conditions.
|
||
- Answer: True
|
||
|
||
12. **[Single Choice, 5 pts]** Which loop is used to iterate over a sequence in Python?
|
||
- Answer: B (for)
|
||
|
||
13. **[Multiple Choices, 10 pts]** Which statements are valid loop control keywords in Python?
|
||
- Answers: A (break), B (continue), C (pass)
|
||
- Partial credit enabled
|
||
|
||
14. **[True/False, 5 pts]** Python supports switch-case statements like C or Java.
|
||
- Answer: False
|
||
|
||
15. **[Single Choice, 5 pts]** What does the 'range(5)' function return?
|
||
- Answer: B (A range object representing 0 to 4)
|
||
|
||
## Features Enabled
|
||
|
||
✅ **"I Don't Know" Option**
|
||
- All questions have `allowIDK: true`
|
||
- Students can select "I don't know" to avoid guessing
|
||
- IDK responses score 0 points (no penalty for honesty)
|
||
|
||
✅ **Multiple Choices with Partial Credit**
|
||
- All multiple_choices questions have `partialCredit: true`
|
||
- Scoring formula: `(correct_selected - wrong_selected) / total_correct × points`
|
||
- Minimum score is 0 (no negative points)
|
||
|
||
✅ **Automatic Scoring**
|
||
- Exam contains only auto-gradable question types
|
||
- Score is calculated immediately upon submission
|
||
- No manual grading required
|
||
|
||
## File Location
|
||
|
||
```
|
||
/Volumes/data/tutor_system/exam_system/data/input/python/2025-10/python-easy-15q-v1.json
|
||
```
|
||
|
||
## Manifest Update
|
||
|
||
The exam has been added to `data/manifest.json` and published:
|
||
|
||
```json
|
||
{
|
||
"examId": "python-easy-15q-v1",
|
||
"subject": "python",
|
||
"month": "2025-10",
|
||
"path": "python/2025-10/python-easy-15q-v1.json",
|
||
"published": true,
|
||
"version": "1.0.0"
|
||
}
|
||
```
|
||
|
||
## Next Steps
|
||
|
||
### To Deploy (when Docker Hub connectivity is stable):
|
||
|
||
```bash
|
||
cd /Volumes/data/tutor_system/exam_system
|
||
docker-compose down
|
||
docker-compose up --build -d
|
||
```
|
||
|
||
### To Test:
|
||
|
||
1. Open http://localhost:4200
|
||
2. Register/Login as a user
|
||
3. You should see the new exam: "Python Fundamentals - Easy Level (15 Questions)"
|
||
4. Start the exam and test:
|
||
- Single choice questions with IDK option
|
||
- Multiple choices with checkboxes and IDK option
|
||
- True/False with IDK option
|
||
- Selecting IDK in multiple_choices clears all other selections
|
||
5. Submit and verify:
|
||
- Automatic scoring works
|
||
- Partial credit is awarded correctly
|
||
- Result page shows all options with color coding
|
||
- IDK selections show yellow notice
|
||
|
||
## Known Issue
|
||
|
||
⚠️ **Docker Hub connectivity is currently unstable**
|
||
- Connection resets when pulling node:18-alpine and nginx:alpine images
|
||
- This is a temporary network issue
|
||
- The exam server (Python) container builds successfully
|
||
- Retry the docker-compose command when network is stable
|
||
|
||
## Previous Exams Still Available
|
||
|
||
The following exams remain published in the system:
|
||
- `python-easy-v1` (original easy exam)
|
||
- `python-intermediate-v1` (50 questions, intermediate level)
|
||
- `python-easy-15q-v1` (new 15-question exam with multiple_choices)
|
||
|
||
All three exams are available in the exam list.
|
||
|