Spaces:
Sleeping
Sleeping
| import random | |
| import gradio as gr | |
| from question_bank import question_bank | |
| def get_random_questions(n=50): | |
| return random.sample(question_bank, n) | |
| def grade_test(responses, name, roll_number, selected): | |
| score = 0 | |
| feedback = [] | |
| for idx, (resp, q) in enumerate(zip(responses, selected)): | |
| correct = q["answer"] | |
| if resp == q["options"][correct]: | |
| score += 1 | |
| feedback.append(f"Q{idx+1}: β Correct") | |
| else: | |
| feedback.append(f"Q{idx+1}: β Incorrect (Correct: {q['options'][correct]})") | |
| result = f""" | |
| **Name**: {name} | |
| **Roll Number**: {roll_number} | |
| **Score**: {score} / {len(selected)} | |
| **Percentage**: {round((score / len(selected)) * 100, 2)}% | |
| """ | |
| return result, "\n".join(feedback) | |
| def build_app(): | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# π§ͺ Preventive Maintenance Test") | |
| gr.Markdown("50 random questions selected from a large question bank.") | |
| with gr.Row(): | |
| name = gr.Textbox(label="Your Full Name") | |
| roll_number = gr.Textbox(label="Roll Number") | |
| selected_questions = get_random_questions() | |
| selected_state = gr.State(selected_questions) | |
| mcq_inputs = [] | |
| for q in selected_questions: | |
| mcq_inputs.append(gr.Radio(choices=q["options"], label=q["question"], interactive=True)) | |
| submit_btn = gr.Button("Submit Test") | |
| result_box = gr.Markdown() | |
| feedback_box = gr.Markdown() | |
| def on_submit(*args): | |
| answers = args[:-3] | |
| name = args[-3] | |
| roll_number = args[-2] | |
| selected = args[-1] | |
| return grade_test(answers, name, roll_number, selected) | |
| submit_btn.click( | |
| fn=on_submit, | |
| inputs=mcq_inputs + [name, roll_number, selected_state], | |
| outputs=[result_box, feedback_box] | |
| ) | |
| return demo | |
| demo = build_app() | |
| if __name__ == "__main__": | |
| demo.launch() | |