Skip to content

Commit c6264f7

Browse files
authored
Merge pull request mouredev#7622 from davidrguez98/main
#22 - Python
2 parents c1f491c + 790413e commit c6264f7

File tree

3 files changed

+237
-0
lines changed

3 files changed

+237
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
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+
#EJERCICIO
21+
22+
#Función de argumento
23+
24+
def apply_func(func, x):
25+
return func(x)
26+
27+
print(apply_func(len, "David"))
28+
29+
#Retorno de función
30+
31+
def apply_multiplier(n):
32+
def multiplier(x):
33+
return x * n
34+
return multiplier
35+
36+
print(apply_multiplier(2)(3))
37+
38+
#Sistema
39+
40+
numbers = [1, 3, 2, 5, 4]
41+
42+
""" map() """
43+
44+
def apply_double(n):
45+
return n * 2
46+
47+
print(map(apply_double, numbers))
48+
print(list(map(apply_double, numbers)))
49+
50+
""" filter() """
51+
52+
def is_even(n):
53+
return n % 2 == 0
54+
55+
print(filter(is_even, numbers))
56+
print(list(filter(is_even, numbers)))
57+
58+
""" sorted() """
59+
60+
print(sorted(numbers))
61+
print(sorted(numbers))
62+
print(sorted(numbers, key=lambda x: -x))
63+
64+
""" reduce() """
65+
66+
from functools import reduce
67+
68+
def sum_(x, y):
69+
return x + y
70+
71+
print(reduce(sum_, numbers))
72+
73+
#DIFICULTAD EXTRA
74+
75+
students = [
76+
{"name": "Juan", "birthdate": "10-03-1998", "results": [5, 7, 6, 7]},
77+
{"name": "José", "birthdate": "02-03-1988", "results": [7, 8, 9, 4]},
78+
{"name": "Pepe", "birthdate": "02-03-1978", "results": [7, 8, 9, 4]},
79+
{"name": "Ramiro", "birthdate": "02-11-1990", "results": [9.5, 9, 9, 10]}
80+
]
81+
82+
#Promedio
83+
84+
def average(results):
85+
return sum(results) / len(results)
86+
87+
print("\nPromedio:")
88+
print(list(map(lambda student: {"name": student["name"], "average": average(student["results"])}, students)))
89+
90+
#Mejores estudiantes
91+
92+
print("\nMejores estudiantes:")
93+
print(list(map(lambda student: student["name"], filter(lambda student: average(student["results"]) >= 9, students))))
94+
95+
#Nacimiento
96+
97+
from datetime import datetime
98+
99+
print("\nOrden de estudiantes por edad:")
100+
print(sorted(students, key=lambda student: datetime.strptime(student["birthdate"], "%d-%m-%Y"), reverse=True))
101+
102+
#Mayor calificación
103+
104+
print("\nMayor calificación:")
105+
print(max(list(map(lambda student: max(student["results"]), students))))
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
""" /*
2+
* EJERCICIO:
3+
* Explora el patrón de diseño "singleton" y muestra cómo crearlo
4+
* con un ejemplo genérico.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Utiliza el patrón de diseño "singleton" para representar una clase que
8+
* haga referencia a la sesión de usuario de una aplicación ficticia.
9+
* La sesión debe permitir asignar un usuario (id, username, nombre y email),
10+
* recuperar los datos del usuario y borrar los datos de la sesión.
11+
*/ """
12+
13+
#EJERCICIO
14+
15+
class Singleton:
16+
17+
_instance = None
18+
19+
def __new__(cls):
20+
if not cls._instance:
21+
cls._instance = super(Singleton, cls).__new__(cls)
22+
23+
return cls._instance
24+
25+
Singleton1 = Singleton()
26+
print(Singleton1)
27+
Singleton2 = Singleton()
28+
print(Singleton2)
29+
30+
print(Singleton1 is Singleton2)
31+
32+
#DIFICULTAD EXTRA
33+
34+
class user:
35+
36+
instance = None
37+
38+
id: int = None
39+
username: str = None
40+
name: str = None
41+
email: str = None
42+
43+
def __new__(cls):
44+
if not cls.instance:
45+
cls.instance = super(user, cls).__new__(cls)
46+
47+
return cls.instance
48+
49+
def set_user(self, id, username, name, email):
50+
51+
self.id = id
52+
self.username = username
53+
self.name = name
54+
self.email = email
55+
56+
def get_user(self):
57+
return f"{self.id}, {self.username}, {self.name}, {self.email}"
58+
59+
def clear_user(self):
60+
self.id = None
61+
self.username = None
62+
self.name = None
63+
self.email = None
64+
65+
session1 = user()
66+
session1.set_user(00, "davidrguez98", "David Rodríguez", "[email protected]")
67+
print(session1.get_user())
68+
69+
session2 = user()
70+
print(session2.get_user())
71+
72+
session3 = user()
73+
session3.clear_user()
74+
print(session3.get_user())
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
""" /*
2+
* EJERCICIO:
3+
* Explora el concepto de "decorador" y muestra cómo crearlo
4+
* con un ejemplo genérico.
5+
*
6+
* DIFICULTAD EXTRA (opcional):
7+
* Crea un decorador que sea capaz de contabilizar cuántas veces
8+
* se ha llamado a una función y aplícalo a una función de tu elección.
9+
*/ """
10+
11+
#EJERCICIO
12+
13+
def print_call(function):
14+
def print_function():
15+
print(f"La función {function.__name__} ha sido llamada.")
16+
return function
17+
return print_function
18+
19+
@print_call
20+
def example_function():
21+
pass
22+
23+
@print_call
24+
def example_function2():
25+
pass
26+
27+
@print_call
28+
def example_function3():
29+
pass
30+
31+
example_function()
32+
example_function2()
33+
example_function3()
34+
35+
#DIFICULTAD EXTRA
36+
37+
def function_call(function):
38+
def function_counter():
39+
function_counter.function_call += 1
40+
print(f"La función {function.__name__} ha sido llamada {function_counter.function_call} veces.")
41+
return function
42+
43+
function_counter.function_call = 0
44+
return function_counter
45+
46+
47+
@function_call
48+
def example_function4():
49+
pass
50+
51+
@function_call
52+
def example_function5():
53+
pass
54+
55+
example_function4()
56+
example_function4()
57+
example_function4()
58+
example_function5()

0 commit comments

Comments
 (0)