maintenance / app.py
Hidayatmahar's picture
Update app.py
7c99fd5 verified
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()