Spaces:
Sleeping
Sleeping
File size: 2,859 Bytes
19945b2 b96d093 3985635 b96d093 19945b2 b96d093 19945b2 b96d093 19945b2 b96d093 0ee3f96 b96d093 0ee3f96 b96d093 19945b2 b96d093 a26a9aa b96d093 19945b2 b96d093 19945b2 b96d093 0ee3f96 b96d093 a26a9aa 3985635 b96d093 0ee3f96 b96d093 a26a9aa 19945b2 a26a9aa 19945b2 b96d093 19945b2 0ee3f96 b96d093 19945b2 b96d093 19945b2 b96d093 3985635 b96d093 0ee3f96 b96d093 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | 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)
|