Skip to content

Commit 8351ed1

Browse files
committed
#22 - python
1 parent e46de88 commit 8351ed1

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
"""* EJERCICIO:
2+
* Explora el concepto de funciones de orden superior en tu lenguaje
3+
* creando ejemplos simples (a tu elección) que muestren su funcionamiento.
4+
*
5+
* DIFICULTAD EXTRA (opcional):
6+
* Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
7+
* lista de calificaciones), utiliza funciones de orden superior para
8+
* realizar las siguientes operaciones de procesamiento y análisis:
9+
* - Promedio calificaciones: Obtiene una lista de estudiantes por nombre
10+
* y promedio de sus calificaciones.
11+
* - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
12+
* que tienen calificaciones con un 9 o más de promedio.
13+
* - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
14+
* - Mayor calificación: Obtiene la calificación más alta de entre todas las
15+
* de los alumnos.
16+
* - Una calificación debe estar comprendida entre 0 y 10 (admite decimales)."""
17+
18+
from functools import reduce
19+
import datetime
20+
21+
# Pueden recibir funciones como parámetros
22+
def funcSuperior(funcion, param): # Recibe una función y un parámetro
23+
return funcion(param)
24+
25+
longitud = funcSuperior(len, 'Juan') # Se pasa la función len, propia de Python, y una cadena, para que devuelva la longitud de dicha cadena.
26+
print(f'La longitud del parámetro es -> {longitud}')
27+
28+
# Pueden devolver funciones como resultado
29+
def aplicarOperacion(operando1, operador):
30+
def operacion(operando2):
31+
if operador == '+':
32+
return operando1 + operando2
33+
elif operador == '-':
34+
return operando1 - operando2
35+
elif operador == '*':
36+
return operando1 * operando2
37+
elif operador == '/':
38+
return operando1 / operando2
39+
else:
40+
return 'Operador no soportado o incorrecto'
41+
return(operacion) # Devuelve la función operacion
42+
43+
# Aplicar la operación
44+
resultado = aplicarOperacion(3,'+') # resultado va a contener una función
45+
print(resultado(4)) # A la función retornada, le envío el argumento restante para completar la operación
46+
print(aplicarOperacion(4, '+')(5)) # Otra forma de llamarla
47+
48+
# Hay funciones de orden superior, propias de Python
49+
# map(): Aplica una función a cada elemento de una lista
50+
letras = ['A', 'B', 'H', 'Y', 'J', 'P', 'R']
51+
def ordenar(letras):
52+
return sorted(letras)
53+
54+
ordenacion = map(ordenar, letras)
55+
print(list(ordenacion))
56+
57+
# filter(): Aplica una función a cada elemento de una lista y devuelve los elementos que cumplen
58+
def mayorQue5(num):
59+
return num > 5
60+
61+
print(list(filter(mayorQue5, [6,4,8,14])))
62+
63+
# sorted() Ordena una lista
64+
print(sorted(letras))
65+
print(sorted(letras, reverse=True)) # Ordena en sentido inverso
66+
print(sorted([6,4,8,14], key=lambda n: -n)) # Aquí se usa una lambda: Funciones anónimas a las que se le envía la lista, en este caso, y se recibe la lista ordenada al revés
67+
68+
# reduce(): Aplica una función a cada elemento de una lista y devuelve el resultado final. Tenemos que importarla de functools
69+
def sumar(x, y):
70+
return x + y
71+
72+
print(reduce(sumar, [6,4,8,14])) # Devuelve la suma de los elementos de toda la lista (6 + 4 + 8 +14) = 32
73+
74+
# EXTRA
75+
estudiantes = [
76+
{'nombre': 'Juan', 'fecha_nacimiento':'01-05-1968', 'notas':[7,8,9]},
77+
{'nombre': 'Mónica', 'fecha_nacimiento':'04-05-1968', 'notas':[8,7,9]},
78+
{'nombre': 'Luis', 'fecha_nacimiento':'06-07-1999', 'notas':[6,7,8]}
79+
]
80+
# Promedio calificaciones: Obtiene una lista de estudiantes por nombre y promedio de sus calificaciones.
81+
def media(notas):
82+
return sum(notas) / len(notas)
83+
84+
print(list(map(lambda estudiante:{'nombre':estudiante['nombre'],
85+
'media':media(estudiante['notas'])}, estudiantes)))
86+
# Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes que tienen calificaciones con un 9 o más de promedio.
87+
88+
print(list(map(lambda estudiante:
89+
estudiante['nombre'], filter(lambda estudiante: media(estudiante['notas']) >= 9, estudiantes))))
90+
91+
# Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
92+
print(list(sorted(estudiantes, key=lambda estudiante: datetime.datetime.strptime(estudiante['fecha_nacimiento'], '%d-%m-%Y'), reverse = True)))
93+
94+
# Mayor calificación: Obtiene la calificación más alta de entre todas las de los alumnos.
95+
print(max(map(lambda estudiante: max(estudiante['notas']), estudiantes)))

0 commit comments

Comments
 (0)