apizzichini's picture
Update app.py
b96d093 verified
Raw
History Blame Contribute Delete
2.86 kB
from shiny import App, ui, render, reactive
import random
# =========================
# Diccionario del juego UNTREF
# =========================
acertijos = {
1: {
"pista": "Universidad pública argentina con fuerte enfoque en inclusión y territorio",
"respuesta": "untref"
},
2: {
"pista": "Modalidad que combina instancias presenciales y virtuales en UNTREF",
"respuesta": "sied"
},
3: {
"pista": "Carrera vinculada al comercio exterior y redes globales",
"respuesta": "relaciones comerciales internacionales"
},
4: {
"pista": "Sistema institucional que regula la educación a distancia",
"respuesta": "sied"
},
5: {
"pista": "Tipo de universidad: pública, gratuita y con compromiso social",
"respuesta": "publica"
}
}
# =========================
# Estados reactivos
# =========================
acertijo_actual = reactive.Value(1)
resultado_estado = reactive.Value("")
puntaje = reactive.Value(0)
# =========================
# Interfaz
# =========================
app_ui = ui.page_fluid(
ui.h2("🎓 Desafío UNTREF"),
ui.p("Respondé los acertijos sobre la universidad"),
ui.hr(),
ui.h4("📌 Pista"),
ui.output_text("pista"),
ui.input_text("respuesta", "Tu respuesta"),
ui.input_action_button("verificar", "✅ Verificar respuesta"),
ui.input_action_button("siguiente", "➡️ Siguiente desafío"),
ui.hr(),
ui.h4("🧠 Resultado"),
ui.output_text("resultado"),
ui.hr(),
ui.h4("⭐ Puntaje"),
ui.output_text("puntaje_actual")
)
# =========================
# Servidor
# =========================
def server(input, output, session):
@output
@render.text
def pista():
return acertijos[acertijo_actual()]["pista"]
@output
@render.text
def resultado():
return resultado_estado()
@output
@render.text
def puntaje_actual():
return f"Puntaje: {puntaje()}"
@reactive.effect
@reactive.event(input.verificar)
def verificar_respuesta():
respuesta_usuario = input.respuesta().lower().strip()
respuesta_correcta = acertijos[acertijo_actual()]["respuesta"]
if respuesta_usuario == respuesta_correcta:
resultado_estado.set("✅ Correcto! Sumás 1 punto.")
puntaje.set(puntaje() + 1)
else:
resultado_estado.set(f"❌ Incorrecto. Respuesta esperada: {respuesta_correcta}")
@reactive.effect
@reactive.event(input.siguiente)
def siguiente_acertijo():
nuevo = random.choice(list(acertijos.keys()))
acertijo_actual.set(nuevo)
resultado_estado.set("")
session.send_input_message("respuesta", {"value": ""})
# =========================
# App
# =========================
app = App(app_ui, server)