Skip to content

Commit 01c97ca

Browse files
committed
mouredev#21 - Python v.final. Ejercicio básico y extra
1 parent a4f5626 commit 01c97ca

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
"""
2+
* EJERCICIO:
3+
* Explora el concepto de callback en tu lenguaje creando un ejemplo
4+
* simple (a tu elección) que muestre su funcionamiento.
5+
"""
6+
import random
7+
8+
my_grades = [random.randint(0,10) for i in range (10)]
9+
10+
def process_grades(grades, callback):
11+
return callback(grades)
12+
13+
def get_passed(grades):
14+
return [grade for grade in grades if grade >= 5]
15+
16+
def get_failed(grades):
17+
return [grade for grade in grades if grade < 5]
18+
19+
def average(grades):
20+
return sum(grades) / len(grades)
21+
22+
print(process_grades(my_grades, get_passed))
23+
print(process_grades(my_grades, get_failed))
24+
print(process_grades(my_grades, average))
25+
26+
27+
"""
28+
* DIFICULTAD EXTRA (opcional):
29+
* Crea un simulador de pedidos de un restaurante utilizando callbacks.
30+
* Estará formado por una función que procesa pedidos.
31+
* Debe aceptar el nombre del plato, una callback de confirmación, una
32+
* de listo y otra de entrega.
33+
* - Debe imprimir un confirmación cuando empiece el procesamiento.
34+
* - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre
35+
* procesos.
36+
* - Debe invocar a cada callback siguiendo un orden de procesado.
37+
* - Debe notificar que el plato está listo o ha sido entregado.
38+
"""
39+
40+
import time
41+
import threading
42+
43+
#print_lock = threading.Lock() Con esto podría hacer que bloques de codigo fueras sincronos (with print_lock:)
44+
45+
def confirm_order(order_name):
46+
print(f"Tu pedido {order_name} Ha sido confirmada.")
47+
48+
def order_ready(order_name):
49+
print(f"Tu pedido {order_name} esta listo.")
50+
51+
def order_delivered(order_name):
52+
print(f"Tu pedido {order_name} Ha sido entregado.")
53+
54+
def process_order(order_name, callback_confirm, callback_ready, callback_delivered):
55+
56+
def process():
57+
callback_confirm(order_name)
58+
time.sleep(random.randint(1,10))
59+
callback_ready(order_name)
60+
time.sleep(random.randint(1,10))
61+
callback_delivered(order_name)
62+
63+
threading.Thread(target=process).start()
64+
65+
process_order("Pizza Margarita", confirm_order, order_ready, order_delivered)
66+
process_order("Hamburguesa", confirm_order, order_ready, order_delivered)
67+
process_order("Shushi", confirm_order, order_ready, order_delivered)
68+
process_order("Arroz frito", confirm_order, order_ready, order_delivered)
69+
70+
71+

0 commit comments

Comments
 (0)