Test1 / app.py
Rooni's picture
Update app.py
a14df07
raw
history blame
No virus
2.48 kB
import gradio as gr
import json
json_data = """
{
"tests": {
"test1": {
"questions": [
{"text": "Выберите А", "correct_answer": "А", "incorrect_text": "Правильный ответ - А."},
{"text": "Выберите Б", "correct_answer": "Б", "incorrect_text": "Правильный ответ - Б."}
]
},
"test2": {
"questions": [
{"text": "Выберите В", "correct_answer": "В", "incorrect_text": "Правильный ответ - В."},
{"text": "Выберите А", "correct_answer": "А", "incorrect_text": "Правильный ответ - А."}
]
}
}
}
"""
data = json.loads(json_data)
def show_questions(test_name):
questions = data['tests'][test_name]['questions']
return {f"question{i+1}": gr.update(visible=True, label=question['text'], info=question['text']) for i, question in enumerate(questions)}, gr.update(visible=False)
def check(answers, test_name):
questions = data['tests'][test_name]['questions']
results = []
for answer, question in zip(answers, questions):
if answer == question['correct_answer']:
results.append("✔️")
else:
results.append(f"✖️ ({question['incorrect_text']})")
return "\n".join(results), gr.update(visible=True)
def reset(questions):
return {f"question{i+1}": gr.update(visible=False) for i in range(len(questions))}, gr.update(visible=True)
css = """
footer {visibility: hidden !important;}
"""
with gr.Blocks(css=css, theme='YTheme/TehnoX') as vui:
with gr.Row():
test_selector = gr.Radio(label="Выберите тест", choices=list(data['tests'].keys()))
select_button = gr.Button("Выбрать")
questions = [gr.Radio(label="", choices=["А", "Б", "В"], visible=False) for _ in range(len(max(data['tests'].values(), key=lambda t: len(t['questions']))['questions']))]
submit_button = gr.Button("Проверить", visible=False)
back_button = gr.Button("Назад", visible=False)
result_output = gr.Markdown(visible=False)
select_button.click(show_questions, inputs=[test_selector], outputs=[questions, select_button])
submit_button.click(check, inputs=questions + [test_selector], outputs=[result_output, submit_button])
back_button.click(reset, inputs=[questions], outputs=[questions, test_selector])
vui.launch()