te's picture
first commit
b152d54
import gradio as gr
import random
import json
with open('species.json') as f:
lista = json.load(f)
def inicializar_preguntas():
num_questions = 20
muestra_juego = random.sample(lista, num_questions)
questions = []
for especie in muestra_juego:
correcta = especie['name']
revision = True
while revision:
opciones = random.sample(lista, 3)
op_names = [op['name'] for op in opciones]
if not correcta in op_names:
op_names.append(correcta)
random.shuffle(op_names)
revision = False
# posicion_ultima_barra = especie['image_url'].rfind('/')
# enlace_recortado = especie['image_url'][:posicion_ultima_barra]
questions.append({"image": especie['image_url'], "options": op_names, "answer": correcta})
return questions
def check_question(option, ind, score, questions):
try:
questions = questions.value
except:
questions = questions
try:
score = score.value
except:
score = score
try:
ind = ind.value
except:
ind = ind
if ind == len(questions) - 1:
# # _, ind, score, image, options, _ = fin_preguntas()# restart_quiz()
# questions_list = inicializar_preguntas()
# questions = gr.State(questions_list)
# #ind = gr.State(0)
image = gr.Image(height=300, width=300)
options = gr.Radio() #choices=questions[ind.value]["options"])
if option == questions[ind]["answer"]:
score += 1
texto_corr = "Correcto"
else:
texto_corr = "Incorrecto\nLa respuesta correcta es: " + questions[ind]["answer"]
# try:
return texto_corr, ind, score, image, options, f"Terminó el quiz\nTuviste {score} de {ind} preguntas correctas\nScore: {int(score/len(questions)*100)}\nReinicie para empezar de nuevo"
# except:
# return texto_corr, ind, score, image, options, f"Terminó el quiz\nScore: {int(score.value/len(questions)*100)}\nReinicie para empezar de nuevo"
if option == questions[ind]["answer"]:
score += 1
texto_corr = "Correcto"
else:
texto_corr = "Incorrecto\nLa respuesta correcta es: " + questions[ind]["answer"]
ind += 1
image = gr.Image(value=questions[ind]["image"], height=300, width=300)
options = gr.Radio(choices=questions[ind]["options"])
return texto_corr, ind, score, image, options, f"Llevas: {score} de {ind} preguntas"
def restart_quiz():
score = gr.State(0)
questions_list = inicializar_preguntas()
questions = gr.State(questions_list)
try:
questions = questions.value
except:
questions = questions
try:
score = score.value
except:
score = score
# questions, ind, image, options = inicializar_preguntas()
ind = gr.State(0)
try:
ind = ind.value
except:
ind = ind
image = gr.Image(value=questions[ind]["image"], height=300, width=300)
options = gr.Radio(choices=questions[ind]["options"])
output = ""
return output, ind, score, image, options, f"", questions
def fin_preguntas():
# score = gr.State(0)
questions_list = inicializar_preguntas()
questions = gr.State(questions_list)
# questions, ind, image, options = inicializar_preguntas()
return "Fin", ind, score, image, options, f"Score: {int(score.value/len(questions)*100)}"
with gr.Blocks() as demo:
# Preguntas al azar
questions_list = inicializar_preguntas()
questions = gr.State(questions_list)
# Variables
score = gr.State(0)
ind = gr.State(0)
# Componentes
image = gr.Image(value=questions.value[ind.value]["image"], height=300, width=300)
options = gr.Radio(choices=questions.value[ind.value]["options"])
button = gr.Button("Siguiente pregunta")
output = gr.Textbox(label="Output Box")
output_score = gr.Textbox(label="Output Box")
restart_button = gr.Button("Restart")
# Funciones
button.click(fn=check_question, inputs=[options, ind, score, questions], outputs=[output, ind, score, image, options, output_score])
restart_button.click(fn=restart_quiz, inputs=[], outputs=[output, ind, score, image, options, output_score, questions])
if __name__ == "__main__":
demo.launch(share=True)