1+ '''
2+ ## 22 FUNCIONES DE ORDEN SUPERIOR
3+ /*
4+ * EJERCICIO:
5+ * Explora el concepto de funciones de orden superior en tu lenguaje
6+ * creando ejemplos simples (a tu elección) que muestren su funcionamiento.
7+ *
8+ * DIFICULTAD EXTRA (opcional):
9+ * Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
10+ * lista de calificaciones), utiliza funciones de orden superior para
11+ * realizar las siguientes operaciones de procesamiento y análisis:
12+ * - Promedio calificaciones: Obtiene una lista de estudiantes por nombre
13+ * y promedio de sus calificaciones.
14+ * - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
15+ * que tienen calificaciones con un 9 o más de promedio.
16+ * - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
17+ * - Mayor calificación: Obtiene la calificación más alta de entre todas las
18+ * de los alumnos.
19+ * - Una calificación debe estar comprendida entre 0 y 10 (admite decimales).
20+ */
21+ '''
22+
23+ from functools import reduce
24+ from datetime import datetime
25+
26+ """
27+ Ejercicio
28+ """
29+
30+ # Funcion con argumento
31+ def apply_func (func , x ):
32+ return func (x )
33+
34+ print (apply_func (len , "Hola mundo" ))
35+
36+ # Retorno de funcion
37+
38+ def apply_multiplier (n ):
39+ def multiplier (x ):
40+ return x * n
41+ return multiplier
42+
43+ x = apply_multiplier (2 )
44+ print (x (5 ))
45+
46+ # Sistema
47+ numbers = [3 , 4 , 1 , 5 , 2 ]
48+
49+ # map()
50+ def applay_double (n ):
51+ return n * 2
52+
53+ print (list (map (applay_double , numbers )))
54+
55+ # filter()
56+ def is_even (n ):
57+ return n % 2 == 0
58+
59+ print (list (filter (is_even , numbers )))
60+
61+ # sorted()
62+ print (sorted (numbers ))
63+ print (sorted (numbers , reverse = True ))
64+ print (sorted (numbers , key = lambda x : - x ))
65+
66+ # reduce
67+
68+ def sum (x , y ):
69+ return x + y
70+
71+ print (reduce (sum , numbers ))
72+
73+ """
74+ Extra
75+ """
76+
77+ students = [
78+ {"name" : "Rigo" , "birthdate" : "25-05-1993" , "grades" : [10 , 9 , 10 , 7 , 10 ]},
79+ {"name" : "Mary" , "birthdate" : "24-08-1988" , "grades" : [9 , 9 , 5 , 7 , 6 ]},
80+ {"name" : "Robe" , "birthdate" : "06-05-1986" , "grades" : [8 , 8 , 8 , 7 , 6 ]}
81+ ]
82+
83+ def average (grades ):
84+ return sum (grades )/ len (grades )
85+
86+ # Promedio calificaciones
87+ print (
88+ list (map (lambda student :
89+ {"name" : student ["name" ],
90+ "average" : average (student ["grades" ])}, students ))
91+ )
92+
93+ # Mejores estudiantes
94+ print (
95+ list (
96+ map (lambda student :
97+ student ["name" ],
98+ filter (lambda student : average (student ["grades" ]) >= 9 , students ))
99+ )
100+ )
101+
102+ # Nacimiento
103+ print (
104+ list (
105+ sorted (students , key = lambda student : datetime .strptime (student ["birthdate" ], "%d-%m-%Y" ), reverse = True )
106+ )
107+ )
108+
109+ # Mayor calificacion
110+
111+ print (max (map (lambda student : max (student ["grades" ]), students )))
0 commit comments