1+ #22 - FUNCIONES DE ORDEN SUPERIOR
2+ """
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+ #Ejemplo de funcion de orden superior
24+ def multiplicacion_superior (funcion , num1 : int , num2 : int ):
25+ return funcion (num1 , num2 ) * funcion (num2 , num1 )
26+
27+ def multiplicar (num1 , num2 ):
28+ return num1 * num2
29+
30+ print (multiplicacion_superior (multiplicar , 2 , 2 ))
31+
32+ # extra
33+ estudiantes_data = [
34+ #nombres
35+ ["Manuel Fernando" ,
36+ "Fernando Vicente" ,
37+ "Iker Diaz" ,
38+ "Alberto Roja" ,
39+ "Raúl Fuentes" ,
40+ "Gonzalo Sanchez" ],
41+ [
42+ "20/01/2010" ,
43+ "05/05/2009" ,
44+ "31/08/2009" ,
45+ "31/12/2009" ,
46+ "12/05/2010" ,
47+ "23/11/2009"
48+ ],
49+ [
50+ [5 , 9 , 7 , 6 , 9 , 10 ],
51+ [10 , 10 , 9 , 7 , 10 , 10 ],
52+ [9 , 9 , 8 , 10 , 6 , 10 ],
53+ [8 , 8 , 7 , 10 , 8 , 9 ],
54+ [10 , 9 , 10 , 9 , 10 , 9 ],
55+ [8 , 10 , 4 , 2 ,10 , 7 ]
56+ ]
57+ ]
58+
59+ def Resultados (funcion1 , funcion2 , funcion3 , lista : list ):
60+ """
61+ funcion 1 es la de promedios
62+ funcion 2 es la de mejores estudiantes
63+ funcion 3 es la del mas joven
64+ """
65+ return funcion1 (lista ) , funcion2 (lista , funcion1 ) , funcion3 (lista ) ,
66+
67+ def promedios (lista ) -> list :
68+ """
69+ calcula los promedios de cada estudiante y lo muestra en pantalla
70+ """
71+ def calcular_promedio (num , elementos ):
72+ """
73+ calcura el promedio
74+ """
75+ return num / elementos
76+
77+ lista_promedios : list = []
78+
79+ print ("\n =========PROMEDIOS DE LOS ESTUDIANTES=========" )
80+ for i in range (len (lista [0 ])):
81+ """
82+ muestra el promedio de cada estudiante
83+ """
84+ promedio = round (calcular_promedio (sum (lista [2 ][i ]) ,len (lista [2 ][i ])) , 2 )
85+ print (f"{ lista [0 ][i ]} : { promedio } " )
86+
87+ lista_promedios .append (promedio )
88+
89+ return lista_promedios
90+
91+ def mejores_estudiante (lista , funcion ) -> list :
92+ """
93+ con los promedios de la funcion , se mira cual tiene una calificacion de 9 o mayor
94+ """
95+ promedios = funcion (lista )
96+ calificacion : list = []
97+ calificancion_ordenada : list = []
98+
99+ for i in range (len (lista [0 ])):
100+
101+ if promedios [i ] >= 9 :
102+ nombre = lista [0 ][i ]
103+ promedio = promedios [i ]
104+ calificacion .append ([nombre , promedio ]) # se guardan los datos en una lista
105+
106+ else :
107+ pass
108+
109+ while calificacion :
110+ elemento_mayor = max (calificacion , key = lambda x : x [1 ])
111+ calificancion_ordenada .append (elemento_mayor )
112+ calificacion .remove (elemento_mayor )
113+
114+ print ("\n =========MEJORES ESTUDIANTES DE MAYOR A MENOR=========" )
115+ for estudiante in calificancion_ordenada :
116+ print (f"{ estudiante [0 ]} : { estudiante [1 ]} " )
117+
118+ def ordenar_por_edad (lista ) -> list :
119+ """
120+ Ordena los estudiantes por fecha de nacimiento del más joven al más viejo.
121+ """
122+ from datetime import datetime
123+
124+ def convertir_fecha (fecha ):
125+ return datetime .strptime (fecha , "%d/%m/%Y" )
126+
127+ nombres_y_fechas = [(lista [0 ][i ], convertir_fecha (lista [1 ][i ])) for i in range (len (lista [0 ]))]
128+ nombres_y_fechas .sort (key = lambda x : x [1 ], reverse = True )
129+
130+ print ("\n =========DE MENOR A MAYOR=========" )
131+ # Imprimir solo los nombres y las fechas formateadas
132+ for nombre , fecha in nombres_y_fechas :
133+ print (f"{ nombre } : { fecha .strftime ('%d/%m/%Y' )} " )
134+
135+
136+ Resultados (promedios , mejores_estudiante , ordenar_por_edad , estudiantes_data )
0 commit comments