|  | 
|  | 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