|
| 1 | +import math |
| 2 | +from datetime import datetime |
| 3 | +from functools import reduce |
| 4 | + |
| 5 | + |
| 6 | +print("\n\n=======================================EJERCICIO=======================================\n\n") |
| 7 | + |
| 8 | +''' |
| 9 | +* EJERCICIO: |
| 10 | + * Explora el concepto de funciones de orden superior en tu lenguaje |
| 11 | + * creando ejemplos simples (a tu elección) que muestren su funcionamiento. |
| 12 | +''' |
| 13 | + |
| 14 | +def arithmetic(function, num): |
| 15 | + return function(num) |
| 16 | + |
| 17 | +def cube_root(num): |
| 18 | + print(f"La raiz cubica de 125 es: {math.cbrt(num)}") |
| 19 | + |
| 20 | +def elevate_cube(num): |
| 21 | + print(f"{num} elevado al cubo es: {num**3}") |
| 22 | + |
| 23 | + |
| 24 | +arithmetic(cube_root, 125) |
| 25 | +arithmetic(elevate_cube, 5) |
| 26 | + |
| 27 | + |
| 28 | +print("\n\n=======================================DIFICULTAD EXTRA=======================================\n\n") |
| 29 | + |
| 30 | +''' |
| 31 | +* DIFICULTAD EXTRA (opcional): |
| 32 | + * Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y |
| 33 | + * lista de calificaciones), utiliza funciones de orden superior para |
| 34 | + * realizar las siguientes operaciones de procesamiento y análisis: |
| 35 | + * - Promedio calificaciones: Obtiene una lista de estudiantes por nombre |
| 36 | + * y promedio de sus calificaciones. |
| 37 | + * - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes |
| 38 | + * que tienen calificaciones con un 9 o mas de promedio. |
| 39 | + * - Nacimiento: Obtiene una lista de estudiantes ordenada desde el mas joven. |
| 40 | + * - Mayor calificación: Obtiene la calificación mas alta de entre todas las |
| 41 | + * de los alumnos. |
| 42 | + * - Una calificación debe estar comprendida entre 0 y 10 (admite decimales). |
| 43 | +''' |
| 44 | + |
| 45 | + |
| 46 | +# Lista de estudiantes |
| 47 | +students = [ |
| 48 | + {"name":"Rantam", "born_date":"29-05-2000", "grades":[7.2, 9.0, 8.6]}, |
| 49 | + {"name":"Helena", "born_date":"12-02-2005", "grades":[9.8, 9.2, 8.7]}, |
| 50 | + {"name":"Silvia", "born_date":"10-07-2003", "grades":[8.5, 8.0, 8.4]}, |
| 51 | + {"name":"Jose Luis", "born_date":"22-10-2003", "grades":[7.0, 6.5, 7.4]}, |
| 52 | + {"name":"Fernando", "born_date":"17-07-1998", "grades":[5.0, 3.8, 4.6]}, |
| 53 | + {"name":"Brais", "born_date":"11-06-2003", "grades":[8.0, 9.4, 9.7]} |
| 54 | +] |
| 55 | + |
| 56 | +# Función para calcular la media |
| 57 | +def calculate_average(grades): |
| 58 | + return round(sum(grades) / len(grades), 2) |
| 59 | + |
| 60 | +# Función para calcular la nota media de los estudiantes |
| 61 | +def get_average_grades(students, average_func): |
| 62 | + return list(map(lambda student: {"name": student["name"], "average_grade": average_func(student["grades"])}, students)) |
| 63 | + |
| 64 | +# Función para obtener los mejores estudiantes |
| 65 | +def get_top_students(students, average_func, threshold=9.0): |
| 66 | + return list(filter(lambda student: average_func(student["grades"]) >= threshold, students)) |
| 67 | + |
| 68 | +# Función para obtener una lista de estudiantes ordenada desde el mas joven |
| 69 | +def sort_students_by_age(students): |
| 70 | + return sorted(students, key=lambda student: datetime.strptime(student["born_date"], "%d-%m-%Y"), reverse=True) |
| 71 | + |
| 72 | +# Función para obtener la calificación mas alta |
| 73 | +def get_highest_grade(students): |
| 74 | + all_grades = reduce(lambda acc, student: acc + student["grades"], students, []) |
| 75 | + return max(all_grades) |
| 76 | + |
| 77 | + |
| 78 | +average_grades = get_average_grades(students, calculate_average) |
| 79 | +top_students = get_top_students(students, calculate_average) |
| 80 | +students_sorted_by_age = sort_students_by_age(students) |
| 81 | +highest_grade = get_highest_grade(students) |
| 82 | + |
| 83 | + |
| 84 | +print("Promedio calificaciones:") |
| 85 | +for student in average_grades: |
| 86 | + print(student) |
| 87 | + |
| 88 | +print("\nMejores estudiantes:") |
| 89 | +for student in top_students: |
| 90 | + print(student["name"], calculate_average(student["grades"])) |
| 91 | + |
| 92 | +print("\nEstudiantes ordenados desde el mas joven:") |
| 93 | +for student in students_sorted_by_age: |
| 94 | + print(student["name"], student["born_date"]) |
| 95 | + |
| 96 | +print("\nMayor calificación:", highest_grade) |
| 97 | + |
| 98 | + |
0 commit comments