|
| 1 | +""" /* |
| 2 | + * EJERCICIO: |
| 3 | + * Explora el concepto de funciones de orden superior en tu lenguaje |
| 4 | + * creando ejemplos simples (a tu elección) que muestren su funcionamiento. |
| 5 | + * |
| 6 | + * DIFICULTAD EXTRA (opcional): |
| 7 | + * Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y |
| 8 | + * lista de calificaciones), utiliza funciones de orden superior para |
| 9 | + * realizar las siguientes operaciones de procesamiento y análisis: |
| 10 | + * - Promedio calificaciones: Obtiene una lista de estudiantes por nombre |
| 11 | + * y promedio de sus calificaciones. |
| 12 | + * - Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes |
| 13 | + * que tienen calificaciones con un 9 o más de promedio. |
| 14 | + * - Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven. |
| 15 | + * - Mayor calificación: Obtiene la calificación más alta de entre todas las |
| 16 | + * de los alumnos. |
| 17 | + * - Una calificación debe estar comprendida entre 0 y 10 (admite decimales). |
| 18 | + */ """ |
| 19 | + |
| 20 | +from functools import reduce |
| 21 | +from datetime import datetime |
| 22 | + |
| 23 | +#EJERCICIO |
| 24 | + |
| 25 | +#Función como parámetro |
| 26 | +def funcion_orden_superior(num1, num2, funcion): |
| 27 | + return funcion(num1, num2) |
| 28 | + |
| 29 | +def suma(num1, num2): |
| 30 | + return num1 + num2 |
| 31 | + |
| 32 | +def resta(num1, num2): |
| 33 | + return num1 - num2 |
| 34 | + |
| 35 | +def multiplica(num1, num2): |
| 36 | + return num1 * num2 |
| 37 | + |
| 38 | +def divide(num1, num2): |
| 39 | + return num1 / num2 |
| 40 | + |
| 41 | +print(funcion_orden_superior(16, 5, suma)) |
| 42 | +print(funcion_orden_superior(16, 5, resta)) |
| 43 | +print(funcion_orden_superior(16, 5, divide)) |
| 44 | +print(funcion_orden_superior(16, 5, multiplica)) |
| 45 | + |
| 46 | +#Función como valor de retorno |
| 47 | +def cuadrado(num): |
| 48 | + return num ** 2 |
| 49 | + |
| 50 | +def cubo(num): |
| 51 | + return num ** 3 |
| 52 | + |
| 53 | +def funcion_orden_superior(operacion): |
| 54 | + if operacion == "doble": |
| 55 | + return cuadrado |
| 56 | + else: |
| 57 | + return cubo |
| 58 | + |
| 59 | +resultado = (funcion_orden_superior("doble")) |
| 60 | +print(resultado(5)) |
| 61 | +resultado = (funcion_orden_superior("triple")) |
| 62 | +print(resultado(5)) |
| 63 | + |
| 64 | +#Función dentro de otra función(cierre) |
| 65 | +def suma_dos(): |
| 66 | + dos = 2 |
| 67 | + def suma(num): |
| 68 | + return num + dos |
| 69 | + return suma |
| 70 | + |
| 71 | +resultado = suma_dos() |
| 72 | +print(resultado(2)) |
| 73 | +print(resultado(7)) |
| 74 | + |
| 75 | +#Map |
| 76 | +numeros = [1, 2, 3, 4, 5] |
| 77 | +cadena = map(str, numeros) |
| 78 | +print(list(cadena)) |
| 79 | + |
| 80 | +#Filter |
| 81 | +def par(numero): |
| 82 | + if numero % 2 == 0: |
| 83 | + return True |
| 84 | + else: |
| 85 | + return False |
| 86 | + |
| 87 | +pares = filter(par, numeros) |
| 88 | +print(list(pares)) |
| 89 | +#Usando lambda |
| 90 | +pares = filter((lambda x: x%2 == 0), numeros) |
| 91 | +print(list(pares)) |
| 92 | + |
| 93 | +#Reduce |
| 94 | +def suma(num1, num2): |
| 95 | + return num1 + num2 |
| 96 | + |
| 97 | +total = reduce(suma, numeros) |
| 98 | +print(total) |
| 99 | +#Usando lambda |
| 100 | +total = reduce((lambda x, y: x + y), numeros) |
| 101 | +print(total) |
| 102 | + |
| 103 | +#Sort o sorted |
| 104 | +numeros = [2, 0.2, 52, 41, 20] |
| 105 | +print(sorted(numeros)) |
| 106 | +print(sorted(numeros, reverse=True)) |
| 107 | + |
| 108 | + |
| 109 | +#DIFICULTAD EXTRA |
| 110 | + |
| 111 | +estudiantes = [["Estudiante1",[8, 9.8, 9, 9.5], "2/3/1995"], |
| 112 | +["Estudiante2",[5, 6.5, 7, 8], "9/6/2001"], |
| 113 | +["Estudiante3",[9, 3.2, 10, 5], "15/8/2020"], |
| 114 | +["Estudiante4",[9.2, 3.4, 7, 9.9], "23/8/1999"], |
| 115 | +["Estudiante5",[9.7, 9.5, 8.8, 9], "1/1/2003"], |
| 116 | +["Estudiante6",[1.2, 4.5, 7.6, 8.9], "31/12/1980"]] |
| 117 | + |
| 118 | +print(f"\nLista Estudiantes: {estudiantes}\n") |
| 119 | + |
| 120 | +lista_promedio = list(map(lambda estudiante: [estudiante[0], round((reduce(lambda x,y: x+y, estudiante[1]))/len(estudiante[1]),2)], estudiantes)) |
| 121 | +print(f"Promedio calificaciones: {lista_promedio}\n") |
| 122 | + |
| 123 | +mejores = list(map(lambda x: x[0], (filter(lambda estudiante: estudiante[1] >= 9, lista_promedio)))) |
| 124 | +print(f"Mejores estudiantes: {mejores}\n") |
| 125 | + |
| 126 | +def ordenar_fechas(lista): |
| 127 | + return datetime.strptime(lista[2], "%d/%m/%Y") |
| 128 | +estudiantes.sort(key=ordenar_fechas, reverse=True) |
| 129 | +print(f"Estudiantes ordenados por el más joven: {estudiantes}\n") |
| 130 | + |
| 131 | +mayor_nota = list(map(lambda estudiante: max(estudiante[1]), estudiantes))[0] |
| 132 | +print(f"Mayor calificación: {mayor_nota}\n") |
0 commit comments