apizzichini commited on
Commit
b96d093
·
verified ·
1 Parent(s): 0ee3f96

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -23
app.py CHANGED
@@ -1,57 +1,105 @@
1
  from shiny import App, ui, render, reactive
 
2
 
3
- # Diccionario del juego
4
- juego = {
5
- "Argentina": {
6
- "pista": "País sudamericano con mate y fútbol",
7
- "respuesta": "argentina"
 
 
8
  },
9
- "Brasil": {
10
- "pista": "País sudamericano famoso por el carnaval",
11
- "respuesta": "brasil"
12
  },
13
- "Japón": {
14
- "pista": "País asiático con trenes bala",
15
- "respuesta": "japon"
 
 
 
 
 
 
 
 
16
  }
17
  }
18
 
19
- pais_actual = "Argentina"
20
-
21
- # Estado reactivo para el resultado
 
22
  resultado_estado = reactive.Value("")
 
23
 
 
24
  # Interfaz
 
25
  app_ui = ui.page_fluid(
26
- ui.h2("🎮 Juego: Adiviná el país"),
27
- ui.p("Pista:"),
 
 
 
28
  ui.output_text("pista"),
 
29
  ui.input_text("respuesta", "Tu respuesta"),
30
- ui.input_action_button("verificar", "Verificar"),
 
 
 
 
 
 
 
31
  ui.hr(),
32
- ui.output_text("resultado")
 
33
  )
34
 
 
35
  # Servidor
 
36
  def server(input, output, session):
37
 
38
  @output
39
  @render.text
40
  def pista():
41
- return juego[pais_actual]["pista"]
42
 
43
  @output
44
  @render.text
45
  def resultado():
46
  return resultado_estado()
47
 
 
 
 
 
 
48
  @reactive.effect
49
  @reactive.event(input.verificar)
50
  def verificar_respuesta():
51
- if input.respuesta().lower() == juego[pais_actual]["respuesta"]:
52
- resultado_estado.set("✅ Correcto!")
 
 
 
 
53
  else:
54
- resultado_estado.set(f"❌ Incorrecto. Era {pais_actual}")
55
 
56
- app = App(app_ui, server)
 
 
 
 
 
 
57
 
 
 
 
 
 
1
  from shiny import App, ui, render, reactive
2
+ import random
3
 
4
+ # =========================
5
+ # Diccionario del juego UNTREF
6
+ # =========================
7
+ acertijos = {
8
+ 1: {
9
+ "pista": "Universidad pública argentina con fuerte enfoque en inclusión y territorio",
10
+ "respuesta": "untref"
11
  },
12
+ 2: {
13
+ "pista": "Modalidad que combina instancias presenciales y virtuales en UNTREF",
14
+ "respuesta": "sied"
15
  },
16
+ 3: {
17
+ "pista": "Carrera vinculada al comercio exterior y redes globales",
18
+ "respuesta": "relaciones comerciales internacionales"
19
+ },
20
+ 4: {
21
+ "pista": "Sistema institucional que regula la educación a distancia",
22
+ "respuesta": "sied"
23
+ },
24
+ 5: {
25
+ "pista": "Tipo de universidad: pública, gratuita y con compromiso social",
26
+ "respuesta": "publica"
27
  }
28
  }
29
 
30
+ # =========================
31
+ # Estados reactivos
32
+ # =========================
33
+ acertijo_actual = reactive.Value(1)
34
  resultado_estado = reactive.Value("")
35
+ puntaje = reactive.Value(0)
36
 
37
+ # =========================
38
  # Interfaz
39
+ # =========================
40
  app_ui = ui.page_fluid(
41
+ ui.h2("🎓 Desafío UNTREF"),
42
+ ui.p("Respondé los acertijos sobre la universidad"),
43
+ ui.hr(),
44
+
45
+ ui.h4("📌 Pista"),
46
  ui.output_text("pista"),
47
+
48
  ui.input_text("respuesta", "Tu respuesta"),
49
+
50
+ ui.input_action_button("verificar", "✅ Verificar respuesta"),
51
+ ui.input_action_button("siguiente", "➡️ Siguiente desafío"),
52
+
53
+ ui.hr(),
54
+ ui.h4("🧠 Resultado"),
55
+ ui.output_text("resultado"),
56
+
57
  ui.hr(),
58
+ ui.h4("⭐ Puntaje"),
59
+ ui.output_text("puntaje_actual")
60
  )
61
 
62
+ # =========================
63
  # Servidor
64
+ # =========================
65
  def server(input, output, session):
66
 
67
  @output
68
  @render.text
69
  def pista():
70
+ return acertijos[acertijo_actual()]["pista"]
71
 
72
  @output
73
  @render.text
74
  def resultado():
75
  return resultado_estado()
76
 
77
+ @output
78
+ @render.text
79
+ def puntaje_actual():
80
+ return f"Puntaje: {puntaje()}"
81
+
82
  @reactive.effect
83
  @reactive.event(input.verificar)
84
  def verificar_respuesta():
85
+ respuesta_usuario = input.respuesta().lower().strip()
86
+ respuesta_correcta = acertijos[acertijo_actual()]["respuesta"]
87
+
88
+ if respuesta_usuario == respuesta_correcta:
89
+ resultado_estado.set("✅ Correcto! Sumás 1 punto.")
90
+ puntaje.set(puntaje() + 1)
91
  else:
92
+ resultado_estado.set(f"❌ Incorrecto. Respuesta esperada: {respuesta_correcta}")
93
 
94
+ @reactive.effect
95
+ @reactive.event(input.siguiente)
96
+ def siguiente_acertijo():
97
+ nuevo = random.choice(list(acertijos.keys()))
98
+ acertijo_actual.set(nuevo)
99
+ resultado_estado.set("")
100
+ session.send_input_message("respuesta", {"value": ""})
101
 
102
+ # =========================
103
+ # App
104
+ # =========================
105
+ app = App(app_ui, server)