Spaces:
Sleeping
Sleeping
File size: 1,967 Bytes
b693073 da2b17f b693073 da2b17f 7c99fd5 da2b17f b693073 da2b17f b693073 da2b17f b693073 da2b17f 7c99fd5 da2b17f b693073 7c99fd5 b693073 da2b17f b693073 da2b17f 7c99fd5 da2b17f b693073 7c99fd5 da2b17f b693073 da2b17f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
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()
|