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()