Hidayatmahar commited on
Commit
b693073
·
verified ·
1 Parent(s): c18e94a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -13
app.py CHANGED
@@ -1,13 +1,18 @@
1
- # app.py
2
-
3
  import gradio as gr
4
- from questions import questions
 
 
 
 
5
 
 
6
  def grade_test(responses, name, roll_number):
7
  score = 0
8
  feedback = []
 
9
 
10
- for idx, (resp, q) in enumerate(zip(responses, questions)):
11
  correct = q["answer"]
12
  if resp == q["options"][correct]:
13
  score += 1
@@ -18,26 +23,30 @@ def grade_test(responses, name, roll_number):
18
  result = f"""
19
  **Name**: {name}
20
  **Roll Number**: {roll_number}
21
- **Score**: {score} / {len(questions)}
22
- **Percentage**: {round((score / len(questions)) * 100, 2)}%
23
  """
24
  return result, "\n".join(feedback)
25
 
26
- def get_test_ui():
 
27
  with gr.Blocks() as demo:
28
- gr.Markdown("# 🧪 Preventive Maintenance Program Test")
29
- gr.Markdown("**Guide for Small Public Water Systems Using Groundwater (DOH 331-351)**")
30
 
31
  with gr.Row():
32
  name = gr.Textbox(label="Your Full Name")
33
  roll_number = gr.Textbox(label="Roll Number")
34
 
 
 
 
 
35
  mcq_inputs = []
36
- for q in questions:
37
  mcq_inputs.append(gr.Radio(choices=q["options"], label=q["question"], interactive=True))
38
 
39
  submit_btn = gr.Button("Submit Test")
40
-
41
  result_box = gr.Markdown()
42
  feedback_box = gr.Markdown()
43
 
@@ -48,14 +57,14 @@ def get_test_ui():
48
  return grade_test(answers, name, roll_number)
49
 
50
  submit_btn.click(
51
- on_submit,
52
  inputs=mcq_inputs + [name, roll_number],
53
  outputs=[result_box, feedback_box]
54
  )
55
 
56
  return demo
57
 
58
- demo = get_test_ui()
59
 
60
  if __name__ == "__main__":
61
  demo.launch()
 
1
+ import random
 
2
  import gradio as gr
3
+ from question_bank import question_bank
4
+
5
+ # Select 50 random questions from the full bank
6
+ def get_random_questions(n=50):
7
+ return random.sample(question_bank, n)
8
 
9
+ # Grade test
10
  def grade_test(responses, name, roll_number):
11
  score = 0
12
  feedback = []
13
+ selected = gr.get_state("selected_questions")
14
 
15
+ for idx, (resp, q) in enumerate(zip(responses, selected)):
16
  correct = q["answer"]
17
  if resp == q["options"][correct]:
18
  score += 1
 
23
  result = f"""
24
  **Name**: {name}
25
  **Roll Number**: {roll_number}
26
+ **Score**: {score} / {len(selected)}
27
+ **Percentage**: {round((score / len(selected)) * 100, 2)}%
28
  """
29
  return result, "\n".join(feedback)
30
 
31
+ # Build Gradio UI
32
+ def build_app():
33
  with gr.Blocks() as demo:
34
+ gr.Markdown("# 🧪 Random Preventive Maintenance Test")
35
+ gr.Markdown("50 questions selected from a large question bank.")
36
 
37
  with gr.Row():
38
  name = gr.Textbox(label="Your Full Name")
39
  roll_number = gr.Textbox(label="Roll Number")
40
 
41
+ # Randomly load 50 questions
42
+ selected_questions = get_random_questions()
43
+ gr.set_state("selected_questions", selected_questions)
44
+
45
  mcq_inputs = []
46
+ for q in selected_questions:
47
  mcq_inputs.append(gr.Radio(choices=q["options"], label=q["question"], interactive=True))
48
 
49
  submit_btn = gr.Button("Submit Test")
 
50
  result_box = gr.Markdown()
51
  feedback_box = gr.Markdown()
52
 
 
57
  return grade_test(answers, name, roll_number)
58
 
59
  submit_btn.click(
60
+ fn=on_submit,
61
  inputs=mcq_inputs + [name, roll_number],
62
  outputs=[result_box, feedback_box]
63
  )
64
 
65
  return demo
66
 
67
+ demo = build_app()
68
 
69
  if __name__ == "__main__":
70
  demo.launch()