Skip to content

Commit a71e8b9

Browse files
authored
Merge pull request mouredev#4030 from santyjL/main
#22 - python
2 parents 5cfdf8c + bf704d0 commit a71e8b9

File tree

1 file changed

+136
-0
lines changed
  • Roadmap/22 - FUNCIONES DE ORDEN SUPERIOR/python

1 file changed

+136
-0
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
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

Comments
 (0)