Rooni commited on
Commit
6e449be
·
1 Parent(s): 5947080

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -33
app.py CHANGED
@@ -1,6 +1,6 @@
1
  import gradio as gr
2
- import json
3
 
 
4
  json_data = """
5
  {
6
  "tests": {
@@ -20,64 +20,67 @@ json_data = """
20
  }
21
  """
22
 
 
23
  data = json.loads(json_data)
24
 
25
- max_questions = max(len(test['questions']) for test in data['tests'].values())
26
-
27
  css = """
28
  footer {visibility: hidden !important;}
29
  """
30
 
31
- with gr.Blocks(css=css, theme='YTheme/TehnoX') as vui:
 
32
  with gr.Row():
33
  test_selector = gr.Radio(label="Выберите тест", choices=list(data['tests'].keys()))
34
  select_button = gr.Button("Выбрать")
35
-
36
- question_blocks = [gr.Radio(label="", choices=["А", "Б", "В"], visible=False) for _ in range(max_questions)]
 
 
 
 
 
37
  submit_button = gr.Button("Проверить", visible=False)
38
- back_button = gr.Button("Назад", visible=False)
39
  result_output = gr.Markdown(visible=False)
 
40
 
41
- def show_questions(test_name):
42
  questions = data['tests'][test_name]['questions']
43
- for i, question in enumerate(questions):
44
- question_blocks[i].visible = True
45
- question_blocks[i].label = question['text']
46
- question_blocks[i].value = ''
47
- for i in range(len(questions), max_questions):
48
- question_blocks[i].visible = False
 
49
  submit_button.visible = True
50
  back_button.visible = True
51
  result_output.visible = False
52
- result_output.update(value='')
53
- test_selector.visible = False
54
- select_button.visible = False
55
- return [block for block in question_blocks] + [submit_button, back_button, result_output, test_selector, select_button]
56
 
57
- def check(answers):
58
- test_name = test_selector.value
59
  questions = data['tests'][test_name]['questions']
60
- results = []
61
  for answer, question in zip(answers, questions):
62
  if answer == question['correct_answer']:
63
- results.append("✔️")
64
  else:
65
- results.append(f"✖️ {question['incorrect_text']}")
66
- return "\n".join(results), gr.update(visible=True)
 
67
 
68
- def reset():
69
- for block in question_blocks:
70
- block.visible = False
71
- block.value = ''
72
  submit_button.visible = False
73
  back_button.visible = False
74
  result_output.visible = False
75
  test_selector.visible = True
76
  select_button.visible = True
77
- return [block for block in question_blocks] + [submit_button, back_button, result_output, test_selector, select_button]
78
 
79
- select_button.click(show_questions, inputs=[test_selector], outputs=question_blocks + [submit_button, back_button, result_output])
80
- submit_button.click(check, inputs=[block for block in question_blocks], outputs=[result_output])
81
- back_button.click(reset, inputs=[], outputs=question_blocks + [submit_button, back_button, result_output, test_selector, select_button])
82
 
83
- vui.launch()
 
1
  import gradio as gr
 
2
 
3
+ # Данные тестов
4
  json_data = """
5
  {
6
  "tests": {
 
20
  }
21
  """
22
 
23
+ # Загрузка данных из JSON
24
  data = json.loads(json_data)
25
 
26
+ # CSS для скрытия футера
 
27
  css = """
28
  footer {visibility: hidden !important;}
29
  """
30
 
31
+ # Создание интерфейса
32
+ with gr.Blocks(css=css, theme='YTheme/TehnoX') as demo:
33
  with gr.Row():
34
  test_selector = gr.Radio(label="Выберите тест", choices=list(data['tests'].keys()))
35
  select_button = gr.Button("Выбрать")
36
+
37
+ question_blocks = []
38
+ for i in range(max(len(test["questions"]) for test in data["tests"].values())):
39
+ with gr.Row(visible=False) as row:
40
+ question = gr.Radio(label=f"Вопрос {i+1}", choices=["А", "Б", "В"])
41
+ question_blocks.append((row, question))
42
+
43
  submit_button = gr.Button("Проверить", visible=False)
 
44
  result_output = gr.Markdown(visible=False)
45
+ back_button = gr.Button("Назад", visible=False)
46
 
47
+ def show_test(test_name):
48
  questions = data['tests'][test_name]['questions']
49
+ for i, (row, question) in enumerate(question_blocks):
50
+ if i < len(questions):
51
+ question.label = questions[i]['text']
52
+ question.choices = ["А", "Б", "В"] # Обновляем варианты ответов, если они разные для каждого вопроса
53
+ row.visible = True
54
+ else:
55
+ row.visible = False
56
  submit_button.visible = True
57
  back_button.visible = True
58
  result_output.visible = False
59
+ return test_name # Возвращаем выбранный тест, чтобы использовать его в дальнейшем
 
 
 
60
 
61
+ def check(answers, test_name):
 
62
  questions = data['tests'][test_name]['questions']
63
+ result_text = ""
64
  for answer, question in zip(answers, questions):
65
  if answer == question['correct_answer']:
66
+ result_text += "✔️ Ответ верный\n"
67
  else:
68
+ result_text += f"✖️ {question['incorrect_text']}\n"
69
+ result_output.visible = True
70
+ return result_text
71
 
72
+ def go_back():
73
+ for row, _ in question_blocks:
74
+ row.visible = False
 
75
  submit_button.visible = False
76
  back_button.visible = False
77
  result_output.visible = False
78
  test_selector.visible = True
79
  select_button.visible = True
80
+ return "", "", "" # Сбросить все выходные данные
81
 
82
+ select_button.click(fn=show_test, inputs=[test_selector], outputs=[test_selector])
83
+ submit_button.click(fn=check, inputs=[question.value for _, question in question_blocks] + [test_selector], outputs=[result_output])
84
+ back_button.click(fn=go_back, inputs=[], outputs=[result_output, test_selector, select_button])
85
 
86
+ demo.launch()