Skip to content

Commit a6b5566

Browse files
authored
Merge branch 'mouredev:main' into main
2 parents 7eee0ed + 80d137c commit a6b5566

File tree

11 files changed

+1435
-705
lines changed

11 files changed

+1435
-705
lines changed

Roadmap/21 - CALLBACKS/python/Aldroide.py

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,19 @@
55

66
import random
77
import time
8+
import threading
89

910

10-
def saludar(nombre):
11-
print(f"Hola {nombre}")
11+
def saludar(nombre, callback):
12+
print("Ejecutando saludo...")
13+
callback(nombre)
1214

1315

14-
def EntradaUsuario(callback):
15-
nombre = input("Ingresa tu nombre: ")
16-
callback(nombre)
16+
def EntradaUsuario(nombre):
17+
print(f"Hola, {nombre}!")
1718

1819

19-
EntradaUsuario(saludar)
20+
saludar("aldo", EntradaUsuario)
2021

2122
"""DIFICULTAD EXTRA (opcional):
2223
Crea un simulador de pedidos de un restaurante utilizando callbacks.
@@ -30,36 +31,34 @@ def EntradaUsuario(callback):
3031

3132

3233
# Definir las funciones callback
33-
34-
def confirm(dish):
34+
def order_process(dish, confirm_callback, ready_callback, delivered_callback):
35+
def process():
36+
confirm_callback(dish)
37+
# Simula el tiempo de preparación
38+
prep_time = random.randint(1, 10)
39+
time.sleep(prep_time)
40+
ready_callback(dish)
41+
# Simula el tiempo de entrega
42+
delivery_time = random.randint(1, 10)
43+
time.sleep(delivery_time)
44+
delivered_callback(dish)
45+
threading.Thread(target=process).start()
46+
47+
48+
def confirm(dish: str):
3549
print(f"Pedido confirmado: {dish}")
3650

3751

38-
def ready(dish):
52+
def ready(dish: str):
3953
print(f"Plato listo: {dish}")
4054

4155

42-
def deliver(dish):
56+
def delivered(dish: str):
4357
print(f"Pedido entregado: {dish}")
4458

4559
# Función que procesa los pedidos
4660

4761

48-
def process(dish, confirm, ready, deliver):
49-
# Confirmar el pedido
50-
confirm(dish)
51-
52-
# Simula el tiempo de preparación
53-
prep_time = random.randint(1, 10)
54-
time.sleep(prep_time)
55-
ready(dish)
56-
57-
# Simula el tiempo de entrega
58-
delivery_time = random.randint(1, 10)
59-
time.sleep(delivery_time)
60-
deliver(dish)
61-
62-
6362
# Simular el procesamiento de un pedido
6463
dish = input("¿Que desea ordenar? ")
65-
process(dish, confirm, ready, deliver)
64+
order_process("Limon", confirm, ready, delivered)
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
from functools import reduce
2+
from datetime import datetime
3+
4+
"""
5+
Explora el concepto de funciones de orden superior en tu lenguaje
6+
creando ejemplos simples (a tu elección) que muestren su funcionamiento.
7+
"""
8+
# funcion como argumento
9+
10+
11+
def apply_func(func, x):
12+
return func(x)
13+
14+
15+
x = apply_func(len, "Aldroide")
16+
print(x)
17+
18+
# retorno de funcion
19+
20+
21+
def apply_mult(n):
22+
def mult(x):
23+
return x*n
24+
return (mult)
25+
26+
27+
x = apply_mult(2)
28+
29+
mult = apply_mult(2)
30+
print(mult(5))
31+
32+
# Sistema
33+
numbers = [1, 3, 4, 2, 5]
34+
35+
# map
36+
37+
38+
def apply_double(n):
39+
return n*2
40+
41+
42+
print(list(map(apply_double, numbers)))
43+
44+
45+
# filter
46+
def is_even(n):
47+
return n % 2 == 0
48+
49+
50+
print(list(filter(is_even, numbers)))
51+
52+
# sorted()
53+
print(sorted(numbers))
54+
print(sorted(numbers, reverse=True))
55+
print(sorted(numbers, key=lambda x: -x))
56+
57+
# reduce()
58+
59+
60+
def sum_values(x, y):
61+
return x + y
62+
63+
64+
print(reduce(sum_values, numbers))
65+
66+
67+
"""
68+
DIFICULTAD EXTRA (opcional):
69+
Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
70+
lista de calificaciones), utiliza funciones de orden superior para
71+
realizar las siguientes operaciones de procesamiento y análisis:
72+
Promedio calificaciones: Obtiene una lista de estudiantes por nombre
73+
promedio de sus calificaciones.
74+
Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
75+
que tienen calificaciones con un 9 o más de promedio.
76+
Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
77+
Mayor calificación: Obtiene la calificación más alta de entre todas las
78+
de los alumnos.
79+
Una calificación debe estar comprendida entre 0 y 10 (admite decimales).
80+
"""
81+
82+
students = [
83+
{"name": "Aldroide", "birthdate": "29-04-1983",
84+
"grades": [9.5, 8.5, 9.9, 10]},
85+
{"name": "Richard", "birthdate": "04-08-1983", "grades": [7.5, 9.5, 7, 6]},
86+
{"name": "Emmanuel", "birthdate": "15-12-2000",
87+
"grades": [6, 8.5, 9.5, 8.2]},
88+
{"name": "Samira", "birthdate": "25-01-1980", "grades": [10, 9, 9.7, 9.9]}
89+
]
90+
91+
92+
def average(grades):
93+
return sum(grades)/len(grades)
94+
95+
96+
# Promedio
97+
print(
98+
list(map(lambda student: {
99+
"name": student["name"],
100+
"average": average(student["grades"])}, students)
101+
)
102+
)
103+
104+
105+
# Mejores
106+
print(
107+
list(map(lambda student:
108+
student["name"],
109+
filter(lambda student: average(student["grades"]) >= 9, students)
110+
)
111+
)
112+
)
113+
114+
# Fecha de naciemiento ordenada
115+
print(sorted(students, key=lambda student: datetime.strptime(
116+
student["birthdate"], "%d-%m-%Y"), reverse=True))
117+
118+
119+
# Califiación más alta
120+
121+
print(max(map(lambda student: max(student["grades"]), students)))
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
#!/bin/bash
2+
3+
echo -e "\n\n=======================================EJERCICIO=======================================\n\n"
4+
5+
# * EJERCICIO:
6+
# * Explora el patron de diseño "singleton" y muestra como crearlo
7+
# * con un ejemplo generico.
8+
9+
# * Bash no es un lenguaje orientado a objetos. Hay que simular el comportamiento de las clases
10+
11+
singleton_instance=""
12+
13+
function get_singleton_instance(){
14+
if [[ -z "$singleton_instance" ]]; then
15+
singleton_instance="instance_created"
16+
fi
17+
}
18+
19+
20+
instance1=$(get_singleton_instance)
21+
instance2=$(get_singleton_instance)
22+
23+
echo -e "\nComprobando que las dos instancias son la misma instancia:\n"
24+
25+
if [[ "$instance1" == "$instance2" ]]; then
26+
echo "True"
27+
else
28+
echo "False"
29+
fi
30+
31+
32+
33+
34+
echo -e "\n\n=======================================DIFICULTAD EXTRA=======================================\n\n"
35+
36+
37+
# * DIFICULTAD EXTRA (opcional):
38+
# * Utiliza el patron de diseño "singleton" para representar una clase que
39+
# * haga referencia a la sesion de usuario de una aplicacion ficticia.
40+
# * La sesion debe permitir asignar un usuario (id, username, nombre y email),
41+
# * recuperar los datos del usuario y borrar los datos de la sesion.
42+
43+
44+
session_id=""
45+
session_username=""
46+
session_name=""
47+
session_email=""
48+
49+
function log_in() {
50+
if [[ -z "$session_id" ]];then
51+
session_id=$1
52+
session_username=$2
53+
session_name=$3
54+
session_email=$4
55+
echo -e "\n\nEl usuario $2 iniciado sesion"
56+
else
57+
echo -e "\nYa hay un usuario con sesion iniciada\n"
58+
fi
59+
}
60+
61+
function logout() {
62+
if [[ -n "$session_id" ]]; then
63+
echo -e "\nEl usuario $session_username ha cerrado la sesion"
64+
session_id=""
65+
session_username=""
66+
session_name=""
67+
session_email=""
68+
else
69+
echo -e "\nNo hay ninguna sesion iniciada\n"
70+
fi
71+
}
72+
73+
function get_user() {
74+
if [[ -n $session_id ]]; then
75+
echo -e "\n\nUsuario actual:"
76+
echo -e "\tID: $session_id"
77+
echo -e "\tUSERNAME: $session_username"
78+
echo -e "\tNAME: $session_name"
79+
echo -e "\tEMAIL: $session_email"
80+
else
81+
echo -e "\nNo hay ninguna sesion abierta"
82+
fi
83+
}
84+
85+
86+
user1_id=1
87+
user1_username="Rantam"
88+
user1_name="Alex"
89+
user1_email="[email protected]"
90+
91+
92+
93+
user2_id=2
94+
user2_username="Junior"
95+
user2_name="Maria"
96+
user2_email="[email protected]"
97+
98+
log_in $user1_id $user1_username $user1_name $user1_email
99+
get_user
100+
101+
log_in $user2_id $user2_username $user2_name $user2_email
102+
103+
logout
104+
105+
log_in $user2_id $user2_username $user2_name $user2_email
106+
get_user
107+
108+
logout
109+
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
"""
2+
Explora el concepto de funciones de orden superior en tu lenguaje
3+
creando ejemplos simples (a tu elección) que muestren su funcionamiento.
4+
"""
5+
6+
7+
class Singleton():
8+
_instance = None
9+
10+
def __new__(cls):
11+
if not cls._instance:
12+
cls._instance = super(Singleton, cls).__new__(cls)
13+
return cls._instance
14+
15+
16+
singleton1 = Singleton()
17+
print(singleton1)
18+
singleton2 = Singleton()
19+
print(singleton2)
20+
21+
"""
22+
Dada una lista de estudiantes (con sus nombres, fecha de nacimiento y
23+
lista de calificaciones), utiliza funciones de orden superior para
24+
realizar las siguientes operaciones de procesamiento y análisis:
25+
- Promedio calificaciones: Obtiene una lista de estudiantes por nombre
26+
y promedio de sus calificaciones.
27+
- Mejores estudiantes: Obtiene una lista con el nombre de los estudiantes
28+
que tienen calificaciones con un 9 o más de promedio.
29+
- Nacimiento: Obtiene una lista de estudiantes ordenada desde el más joven.
30+
- Mayor calificación: Obtiene la calificación más alta de entre todas las
31+
de los alumnos.
32+
- Una calificación debe estar comprendida entre 0 y 10 (admite decimales).
33+
34+
"""
35+
36+
37+
class UserSession():
38+
_instance = None
39+
40+
id = int
41+
username = str
42+
name = str
43+
email = str
44+
45+
def __new__(cls):
46+
if not cls._instance:
47+
cls._instance = super(UserSession, cls).__new__(cls)
48+
return cls._instance
49+
50+
def set_user(self, id, name, username, email):
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+
66+
session1 = UserSession()
67+
print(session1.get_user())
68+
session1.set_user(1, "aldroide", "Aldo AC", "aldroidegmail.com")
69+
print(session1.get_user())
70+
71+
session2 = UserSession()
72+
print(session2.get_user())
73+
74+
session3 = UserSession()
75+
session3.clear_user()
76+
print(session3.get_user())

0 commit comments

Comments
 (0)