Spaces:
Running
Running
import json | |
import random | |
class QCMTool: | |
def __init__(self, json_file): | |
""" | |
Initialize the QCM tool with a JSON file containing questions. | |
""" | |
self.json_file = json_file | |
self.questions = self.load_questions() | |
def load_questions(self): | |
""" | |
Load questions from the JSON file. | |
""" | |
with open(self.json_file, 'r') as file: | |
questions = json.load(file) | |
return questions | |
def pick_random_question(self): | |
""" | |
Pick a random question from the loaded questions. | |
""" | |
return random.choice(self.questions) | |
def check_answer(self, question, user_answer): | |
""" | |
Check if the user's answer is correct and provide an explanation. | |
""" | |
if user_answer == question["correct_answer"]: | |
return True, question["explanation"] | |
else: | |
return False, question["explanation"] | |
def run(self): | |
""" | |
Run the QCM tool: pick a question, ask the user, and check the answer. | |
""" | |
question = self.pick_random_question() | |
print("Question:", question["question"]) | |
for i, option in enumerate(question["options"], 1): | |
print(f"{chr(64 + i)}. {option}") # Use 'A', 'B', 'C', 'D' instead of numbers | |
user_answer = input("Your answer (enter the option letter, e.g., A, B, C, D): ").strip().upper() | |
try: | |
# Map user input (A, B, C, D) to the corresponding option index | |
option_index = ord(user_answer) - 65 # Convert 'A' to 0, 'B' to 1, etc. | |
if 0 <= option_index < len(question["options"]): | |
selected_option = question["options"][option_index] | |
is_correct, explanation = self.check_answer(question, selected_option) | |
if is_correct: | |
print("Correct! 🎉") | |
else: | |
print("Incorrect! 😞") | |
print("Explanation:", explanation) | |
else: | |
print("Invalid option letter. Please try again.") | |
except (ValueError, IndexError): | |
print("Invalid input. Please enter a valid option letter (A, B, C, D).") | |
qcm_tool = QCMTool('info/questions.json') | |
# Run the QCM tool | |
qcm_tool.run() |