SkillSync / utils /quiz_handler.py
yekkala's picture
Update utils/quiz_handler.py
5765b05 verified
"""
Quiz handling for SkillSync
"""
class QuizHandler:
"""Handles quiz evaluation and scoring"""
def __init__(self, passing_score=80):
self.passing_score = passing_score
def evaluate_answers(self, questions, answers):
"""Evaluate quiz answers and return results"""
correct_count = 0
results = []
for i, (answer, question) in enumerate(zip(answers, questions)):
is_correct = answer == question['correct']
if is_correct:
correct_count += 1
results.append({
"question_num": i + 1,
"question": question['question'],
"user_answer": question['options'][answer] if answer is not None else "Not answered",
"correct_answer": question['options'][question['correct']],
"is_correct": is_correct
})
score = int((correct_count / len(questions)) * 100) if questions else 0
passed = score >= self.passing_score
return {
"score": score,
"correct_count": correct_count,
"total_questions": len(questions),
"passed": passed,
"results": results
}
def format_results(self, evaluation):
"""Format quiz results for display"""
passed_icon = "πŸŽ‰" if evaluation['passed'] else "πŸ“š"
passed_text = "**Passed!**" if evaluation['passed'] else "**Keep Learning!** You need 80% to pass."
output = f"""
## Quiz Results
**Score:** {evaluation['score']}%
{passed_icon} {passed_text}
**Correct Answers:** {evaluation['correct_count']}/{evaluation['total_questions']}
---
### Answer Review:
"""
for result in evaluation['results']:
status = "βœ…" if result['is_correct'] else "❌"
output += f"{status} **Q{result['question_num']}:** {result['question']}\n"
output += f"- Your answer: *{result['user_answer']}*\n"
output += f"- Correct answer: *{result['correct_answer']}*\n\n"
return output