Skip to content

Commit 43c407b

Browse files
committed
#21 - Python
1 parent 64bc99e commit 43c407b

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
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+
* DIFICULTAD EXTRA (opcional):
7+
* Crea un simulador de pedidos de un restaurante utilizando callbacks.
8+
* Estará formado por una función que procesa pedidos.
9+
* Debe aceptar el nombre del plato, una callback de confirmación, una
10+
* de listo y otra de entrega.
11+
* - Debe imprimir un confirmación cuando empiece el procesamiento.
12+
* - Debe simular un tiempo aleatorio entre 1 a 10 segundos entre
13+
* procesos.
14+
* - Debe invocar a cada callback siguiendo un orden de procesado.
15+
* - Debe notificar que el plato está listo o ha sido entregado.
16+
"""
17+
18+
import asyncio
19+
20+
async def main():
21+
await task_callback(tarea(), callback)
22+
23+
async def task_callback(tarea, callback):
24+
await tarea
25+
callback()
26+
27+
async def tarea():
28+
print("Sumando numeros..")
29+
await asyncio.sleep(2)
30+
print("Task finished")
31+
32+
def callback():
33+
print("Funcion callback invocada despues de completar task")
34+
35+
asyncio.run(main())
36+
37+
38+
############# ---------------------------- EXTRA -------------------------- #################
39+
40+
import random
41+
42+
menu = ["Hamburguesa", "Pizza", "Tacos", "Ensalada Cesar", "Pollo Frito"]
43+
44+
async def order_process(plato, confir_callback, ready_callback, entrega_callback):
45+
46+
confir_callback(plato)
47+
preparation_time = random.randint(1,10)
48+
print(f"Preparando {plato}... (espera {preparation_time} segundos)")
49+
await asyncio.sleep(preparation_time)
50+
51+
ready_callback(plato)
52+
delivery_time = random.randint(1,10)
53+
print(f"Entregando {plato}... (espera {delivery_time} segundos)")
54+
await asyncio.sleep(delivery_time)
55+
56+
entrega_callback(plato)
57+
58+
def confir_callback(plato):
59+
print(f"Pedido Confirmado: {plato}")
60+
61+
def ready_callback(plato):
62+
print(f"Pedido listo: {plato}")
63+
64+
def entrega_callback(plato):
65+
print(f"Pedido entregado: {plato}")
66+
67+
68+
def mostrar_menu_y_pedido():
69+
print("Menu de platos disponible:")
70+
for id, plato in enumerate(menu, start=1):
71+
print(f"{id}: {plato}")
72+
73+
while True:
74+
try:
75+
pedido= int(input("\nIngrese el numero de plato que desea pedir: "))
76+
if 1 <= pedido <= len(menu):
77+
return menu[pedido - 1]
78+
else:
79+
print("Numero invalido, porfavor intente nuevamente.")
80+
except ValueError:
81+
print("Entrada invalida, porfavor ingrese un numero.")
82+
83+
84+
async def realizar_pedido():
85+
print("Simulador de pedidos de un restaurante\n")
86+
87+
plato_elegido = mostrar_menu_y_pedido()
88+
tarea = order_process(plato_elegido, confir_callback, ready_callback, entrega_callback)
89+
90+
await tarea
91+
92+
if __name__ == "__main__":
93+
asyncio.run(realizar_pedido())
94+
95+

0 commit comments

Comments
 (0)