Skip to content

Commit 8578911

Browse files
authored
Merge pull request #4014 from Kenysdev/22.py
#22 - Python
2 parents cf12e8a + 18d1e88 commit 8578911

File tree

1 file changed

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

1 file changed

+107
-0
lines changed
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# ╔═════════════════════════════════════╗
2+
# ║ Autor: Kenys Alvarado ║
3+
# ║ GitHub: https://github.com/Kenysdev ║
4+
# ║ 2024 - Python ║
5+
# ╚═════════════════════════════════════╝
6+
7+
# -----------------------------------
8+
# * FUNCIONES DE ORDEN SUPERIOR
9+
# -----------------------------------
10+
11+
"""
12+
* EJERCICIO #1:
13+
* Explora el concepto de funciones de orden superior en tu lenguaje
14+
* creando ejemplos simples (a tu elección) que muestren su funcionamiento.
15+
"""
16+
17+
def arithmetic_op(func: object):
18+
def wrapper(x: int, y: int):
19+
return func(x, y)
20+
return wrapper
21+
22+
def add(x: int, y: int):
23+
return x + y
24+
25+
def subtract(x: int, y: int):
26+
return x - y
27+
28+
def multiply(x: int, y: int):
29+
return x * y
30+
31+
addition = arithmetic_op(add)
32+
subtraction = arithmetic_op(subtract)
33+
multiplication = arithmetic_op(multiply)
34+
35+
r_addition = addition(2, 3)
36+
r_subtraction = subtraction(10, 5)
37+
r_multip = multiplication(2, 5)
38+
39+
40+
print(f"""EJERCICIO #1
41+
Resultado de la suma: {r_addition}
42+
Resultado de la resta: {r_subtraction}
43+
Resultado de la multip.: {r_multip}
44+
""")
45+
46+
# ______________________________________
47+
"""
48+
* EJERCICIO #2:
49+
* Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
50+
* lista de calificaciones), utiliza funciones de orden superior para
51+
* realizar las siguientes operaciones de procesamiento y análisis:
52+
* - Promedio calificaciones: Obtiene una lista de estudiantes por nombre
53+
* y promedio de sus calificaciones.
54+
* - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
55+
* que tienen calificaciones con un 9 o más de promedio.
56+
* - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
57+
* - Mayor calificación: Obtiene la calificación más alta de entre todas las
58+
* de los alumnos.
59+
* - Una calificación debe estar comprendida entre 0 y 10 (admite decimales).
60+
"""
61+
62+
students_list = [
63+
{"name": "Ken", "dob": "2012-04-21", "grades": [9.5, 9.4, 9.3, 9.2]},
64+
{"name": "Ben", "dob": "2012-03-20", "grades": [8.5, 8.4, 8.3, 8.2]},
65+
{"name": "Ada", "dob": "2012-02-19", "grades": [7.5, 7.4, 7.3, 7.2]},
66+
{"name": "zoe", "dob": "2012-01-18", "grades": [9.0, 9.1, 9.0, 9.1]},
67+
]
68+
69+
def higher_order_fun(msg: str, print_fn: object) -> object:
70+
def wrapper(students: list):
71+
print(f"\n----\n{msg}")
72+
for student in students:
73+
print_fn(student)
74+
75+
return wrapper
76+
77+
def print_gpa(student: dict):
78+
grades: list = student["grades"]
79+
average_grade: float = sum(grades) / len(grades)
80+
print(student["name"], average_grade)
81+
82+
def print_top(student: dict):
83+
grades: list = student["grades"]
84+
average: float = sum(grades) / len(grades)
85+
if average >= 9:
86+
print(student["name"])
87+
88+
def print_bth(student: dict):
89+
print(student["name"], student["dob"])
90+
91+
def print_hgg(student: dict):
92+
max_grade: float = max(student["grades"])
93+
name: str = student["name"]
94+
print(name, max_grade)
95+
96+
grade_point_average = higher_order_fun("Promedio calificaciones", print_gpa)
97+
top_students = higher_order_fun("Mejores estudiantes:", print_top)
98+
birth_order = higher_order_fun("Por nacimiento:", print_bth)
99+
highest_grade = higher_order_fun("Mayor calificación:", print_hgg)
100+
101+
print("EJERCICIO #2")
102+
103+
grade_point_average(students_list)
104+
top_students(students_list)
105+
birth_order(sorted(students_list, key=lambda student: student["dob"]))
106+
highest_grade(students_list)
107+

0 commit comments

Comments
 (0)