1
+ # -*- coding: utf-8 -*-
2
+ """#36-el-sombrero-seleccionador.ipynb
3
+
4
+ Automatically generated by Colab.
5
+
6
+ Original file is located at
7
+ https://colab.research.google.com/drive/1FeZc3xRWVqqOFn7EfMpHUBIU0IFGdOFh
8
+
9
+ * EJERCICIO:
10
+ * Cada 1 de septiembre, el Hogwarts Express parte hacia la escuela
11
+ * de programación de Hogwarts para magos y brujas del código.
12
+ * En ella, su famoso sombrero seleccionador ayuda a los programadores
13
+ * a encontrar su camino...
14
+ * Desarrolla un programa que simule el comportamiento del sombrero.
15
+ * Requisitos:
16
+ * 1. El sombrero realizará 10 preguntas para determinar la casa del alumno.
17
+ * 2. Deben existir 4 casas. Por ejemplo: Frontend, Backend, Mobile y Data.
18
+ * (Puedes elegir las que quieras)
19
+ * Acciones:
20
+ * 1. Crea un programa que solicite el nombre del alumno y realice 10
21
+ * preguntas, con cuatro posibles respuestas cada una.
22
+ * 2. Cada respuesta asigna puntos a cada una de las casas (a tu elección).
23
+ * 3. Una vez finalizado, el sombrero indica el nombre del alumno
24
+ * y a qué casa pertenecerá (resuelve el posible empate de manera aleatoria,
25
+ * pero indicándole al alumno que la decisión ha sido complicada).
26
+ """
27
+
28
+ preguntas_respuestas = [
29
+
30
+ # Frontend
31
+ {
32
+ "id" :1 ,
33
+ "pregunta" : "¿Cuál de los siguientes lenguajes se utiliza comúnmente para diseñar el aspecto visual de una página web?" ,
34
+ "respuestas" : {
35
+ "a" : "HTML" ,
36
+ "b" : "Java" ,
37
+ "c" : "CSS" , # Correcta
38
+ "d" : "Python"
39
+ } ,
40
+ "correcta" : "c" ,
41
+ "casa" :"fronted"
42
+ },
43
+ {
44
+ "id" :2 ,
45
+ "pregunta" : "¿Cuál es el propósito principal de JavaScript en el desarrollo web frontend?" ,
46
+ "respuestas" : {
47
+ "a" : "Crear gráficos 3D" ,
48
+ "b" : "Añadir interactividad a las páginas web" , # Correcta
49
+ "c" : "Definir la estructura de una página" ,
50
+ "d" : "Estilizar la página web"
51
+ },
52
+ "correcta" : "b" ,
53
+ "casa" :"fronted"
54
+ },
55
+ {
56
+ "id" :3 ,
57
+ "pregunta" : "¿Cuál de los siguientes frameworks es utilizado principalmente para el desarrollo frontend?" ,
58
+ "respuestas" : {
59
+ "a" : "Django" ,
60
+ "b" : "Flask" ,
61
+ "c" : "React" , # Correcta
62
+ "d" : "PostgreSQL"
63
+ },
64
+ "correcta" : "c"
65
+ },
66
+ {
67
+ "id" :4 ,
68
+ "pregunta" : "¿Qué propiedad CSS se usa para cambiar el tamaño de un elemento?" ,
69
+ "respuestas" : {
70
+ "a" : "color" ,
71
+ "b" : "margin" ,
72
+ "c" : "width" , # Correcta
73
+ "d" : "display"
74
+ },
75
+ "correcta" : "c" ,
76
+ "casa" :"fronted"
77
+ },
78
+
79
+ # Backend
80
+ {
81
+ "id" :5 ,
82
+ "pregunta" : "¿Cuál de los siguientes lenguajes es más comúnmente usado para el desarrollo backend?" ,
83
+ "respuestas" : {
84
+ "a" : "CSS" ,
85
+ "b" : "JavaScript" ,
86
+ "c" : "Python" , # Correcta
87
+ "d" : "HTML"
88
+ },
89
+ "correcta" : "c" ,
90
+ "casa" :"backend"
91
+ },
92
+ {
93
+ "id" :6 ,
94
+ "pregunta" : "¿Qué es una API en el contexto de desarrollo backend?" ,
95
+ "respuestas" : {
96
+ "a" : "Una biblioteca para crear gráficos" ,
97
+ "b" : "Un método de autenticación" ,
98
+ "c" : "Una interfaz para que las aplicaciones se comuniquen" , # Correcta
99
+ "d" : "Una base de datos"
100
+ },
101
+ "correcta" : "c" ,
102
+ "casa" :"backend"
103
+ },
104
+ {
105
+ "id" :7 ,
106
+ "pregunta" : "¿Cuál es un ejemplo de un servidor de aplicaciones backend?" ,
107
+ "respuestas" : {
108
+ "a" : "Apache" , # Correcta
109
+ "b" : "Bootstrap" ,
110
+ "c" : "React" ,
111
+ "d" : "MySQL"
112
+ },
113
+ "correcta" : "a" ,
114
+ "casa" :"backend"
115
+ },
116
+ {
117
+ "id" :8 ,
118
+ "pregunta" : "¿Qué tipo de base de datos utiliza SQL?" ,
119
+ "respuestas" : {
120
+ "a" : "NoSQL" ,
121
+ "b" : "Relacional" , # Correcta
122
+ "c" : "Archivo plano" ,
123
+ "d" : "Jerárquica"
124
+ },
125
+ "correcta" : "b" ,
126
+ "casa" :"backend"
127
+ },
128
+
129
+ # Data
130
+ {
131
+ "id" :9 ,
132
+ "pregunta" : "¿Qué lenguaje es más popular para el análisis de datos?" ,
133
+ "respuestas" : {
134
+ "a" : "Java" ,
135
+ "b" : "R" , # Correcta
136
+ "c" : "C++" ,
137
+ "d" : "PHP"
138
+ },
139
+ "correcta" : "b" ,
140
+ "casa" :"data"
141
+ },
142
+ {
143
+ "id" :10 ,
144
+ "pregunta" : "¿Qué biblioteca de Python es ampliamente utilizada para el análisis de datos?" ,
145
+ "respuestas" : {
146
+ "a" : "TensorFlow" ,
147
+ "b" : "Django" ,
148
+ "c" : "pandas" , # Correcta
149
+ "d" : "Flask"
150
+ },
151
+ "correcta" : "c" ,
152
+ "casa" :"data"
153
+ },
154
+ {
155
+ "id" :11 ,
156
+ "pregunta" : "¿Qué significa el término 'Big Data'?" ,
157
+ "respuestas" : {
158
+ "a" : "Pequeñas cantidades de datos" ,
159
+ "b" : "Un proceso de minería de datos" ,
160
+ "c" : "Conjuntos de datos extremadamente grandes" , # Correcta
161
+ "d" : "Una estructura de base de datos"
162
+ },
163
+ "correcta" : "c" ,
164
+ "casa" :"data"
165
+ },
166
+ {
167
+ "id" :12 ,
168
+ "pregunta" : "¿Cuál es la principal ventaja de una base de datos NoSQL sobre una base de datos relacional?" ,
169
+ "respuestas" : {
170
+ "a" : "Soporte para transacciones ACID" ,
171
+ "b" : "Mejor rendimiento en grandes cantidades de datos no estructurados" , # Correcta
172
+ "c" : "Mayor seguridad" ,
173
+ "d" : "Compatibilidad con SQL"
174
+ },
175
+ "correcta" : "b" ,
176
+ "casa" :"data"
177
+ },
178
+
179
+ # Mobile
180
+ {
181
+ "id" :13 ,
182
+ "pregunta" : "¿Qué lenguaje es usado principalmente para el desarrollo nativo de aplicaciones Android?" ,
183
+ "respuestas" : {
184
+ "a" : "Swift" ,
185
+ "b" : "Kotlin" , # Correcta
186
+ "c" : "JavaScript" ,
187
+ "d" : "C#"
188
+ },
189
+ "correcta" : "b" ,
190
+ "casa" :"mobile"
191
+ },
192
+ {
193
+ "id" :14 ,
194
+ "pregunta" : "¿Qué lenguaje se utiliza para desarrollar aplicaciones nativas de iOS?" ,
195
+ "respuestas" : {
196
+ "a" : "Java" ,
197
+ "b" : "Python" ,
198
+ "c" : "Swift" , # Correcta
199
+ "d" : "Ruby"
200
+ },
201
+ "correcta" : "c" ,
202
+ "casa" :"mobile"
203
+ },
204
+ {
205
+ "id" :15 ,
206
+ "pregunta" : "¿Cuál de las siguientes plataformas permite el desarrollo de aplicaciones móviles multiplataforma?" ,
207
+ "respuestas" : {
208
+ "a" : "Xcode" ,
209
+ "b" : "Android Studio" ,
210
+ "c" : "Flutter" , # Correcta
211
+ "d" : "Jupyter Notebook"
212
+ },
213
+ "correcta" : "c" ,
214
+ "casa" :"mobile"
215
+ }
216
+ ]
217
+
218
+ import math
219
+ import random
220
+
221
+ #alumno candidato para ingresar a la escuela de programacion de Hogwarts
222
+ class Alumno :
223
+
224
+ def __init__ (self , nombre ):
225
+ self .nombre = nombre
226
+
227
+ #sombrero que realiza un test para asignar a un alumno a una casa de programacion en Hogwarts
228
+ class Sombrero :
229
+
230
+ def __init__ (self , alumno , preguntas ):
231
+ self .alumno = alumno
232
+ self .preguntas = preguntas
233
+ self .puntuacion = {
234
+ "fronted" : 0 ,
235
+ "backend" : 0 ,
236
+ "mobile" : 0 ,
237
+ "data" : 0
238
+ }
239
+ self .escuelas = [
240
+ {
241
+ "casa" :"fronted" ,
242
+ "alumnos" :[],
243
+ },
244
+ {
245
+ "casa" :"backend" ,
246
+ "alumnos" :[],
247
+ },
248
+ {
249
+ "casa" :"mobile" ,
250
+ "alumnos" :[]
251
+ },
252
+ {
253
+ "casa" :"data" ,
254
+ "alumnos" :[]
255
+ }
256
+ ]
257
+
258
+ def test (self ):
259
+ pass
260
+
261
+ def seleccionar_pregunta (self ):
262
+ index_pregunta = random .randint (1 , len (self .preguntas ))
263
+ res = self .preguntas [index_pregunta - 1 ]
264
+ return res
265
+
266
+ def adicionar_punto_casa (self , nombre_casa ):
267
+ self .puntuacion [nombre_casa ] += 1
268
+
269
+ def restar_punto_casa (self , nombre_casa ):
270
+ if self .puntuacion [nombre_casa ] == 0 :
271
+ return
272
+ self .puntuacion [nombre_casa ] -= 1
273
+
274
+ def mostrar_puntuacion (self ):
275
+ return self .puntuacion
276
+
277
+ def asignar_casa_ganadora (self ):
278
+ casa = [(k , v ) for k , v in self .puntuacion .items () if v > 2 ]
279
+ print (casa )
280
+ #return casa
281
+
282
+ candidatos = ['Juan Gabriel' ,'Peter Ortiz' ,'John Guerrero' ]
283
+
284
+ for name in candidatos :
285
+ total_preguntas = 0
286
+ print ('Bienvenido a la Escuela de Programación de Hagwarts\n ' )
287
+ print ('cual es tu nombre?: ' )
288
+ print (f'hola, { name } ' )
289
+
290
+ al = Alumno (name )
291
+ s = Sombrero (al , preguntas_respuestas )
292
+
293
+ while total_preguntas <= 10 :
294
+ total_preguntas += 1
295
+ pregunta = s .seleccionar_pregunta ()
296
+
297
+ print (f'N. pregunta: { total_preguntas } ' )
298
+ nombre_casa = pregunta ["casa" ]
299
+ print (pregunta ["pregunta" ])
300
+ print ('=' * len (pregunta ['pregunta' ]))
301
+
302
+ print ('RESPUESTAS: \n ' )
303
+ for key , value in pregunta ['respuestas' ].items ():
304
+ print (f'{ key } : { value } ' )
305
+
306
+ respuesta = str (input ('Cual es la respuesta? ' ))
307
+ if respuesta == pregunta ['correcta' ]:
308
+ print ("Respuesta correcta" )
309
+ s .adicionar_punto_casa (nombre_casa )
310
+ elif respuesta != pregunta ['correcta' ]:
311
+ print ("Respuesta incorrecta" )
312
+ s .restar_punto_casa (nombre_casa )
313
+
314
+ print (s .mostrar_puntuacion ())
315
+ print (s .asignar_casa_ganadora ())
316
+ print ('=' * 50 )
0 commit comments