1+ """
2+ * EJERCICIO:
3+ * Empleando tu lenguaje, explora la definición del tipo de dato
4+ * que sirva para definir enumeraciones (Enum).
5+ * Crea un Enum que represente los días de la semana del lunes
6+ * al domingo, en ese orden. Con ese enumerado, crea una operación
7+ * que muestre el nombre del día de la semana dependiendo del número entero
8+ * utilizado (del 1 al 7).
9+ *
10+ * DIFICULTAD EXTRA (opcional):
11+ * Crea un pequeño sistema de gestión del estado de pedidos.
12+ * Implementa una clase que defina un pedido con las siguientes características:
13+ * - El pedido tiene un identificador y un estado.
14+ * - El estado es un Enum con estos valores: PENDIENTE, ENVIADO, ENTREGADO y CANCELADO.
15+ * - Implementa las funciones que sirvan para modificar el estado:
16+ * - Pedido enviado
17+ * - Pedido cancelado
18+ * - Pedido entregado
19+ * (Establece una lógica, por ejemplo, no se puede entregar si no se ha enviado, etc...)
20+ * - Implementa una función para mostrar un texto descriptivo según el estado actual.
21+ * - Crea diferentes pedidos y muestra cómo se interactúa con ellos.
22+ """
23+
24+ from enum import Enum
25+
26+ class WeekDays (Enum ):
27+ MONDAY = 1
28+ TUESDAY = 2
29+ WEDNESDAY = 3
30+ THURSDAY = 4
31+ FRIDAY = 5
32+ SATURDAY = 6
33+ SUNDAY = 7
34+
35+ def day_name (num ):
36+ try :
37+ day = WeekDays (num )
38+ return day .name .capitalize ()
39+ except ValueError :
40+ return "Numero del dia invalido"
41+
42+ print (day_name (4 ))
43+ print (day_name (1 ))
44+ print (day_name (7 ))
45+ print (day_name (8 ))
46+
47+ ######## ----------------------------------- EXTRA ------------------------------------- ################
48+
49+ class OrderState (Enum ):
50+ PENDIENTE = 1
51+ ENVIADO = 2
52+ ENTREGADO = 3
53+ CANCELADO = 4
54+
55+ class Pedido :
56+
57+ def __init__ (self , identificador , estado ):
58+ self .identificador = identificador
59+ self .estado = estado
60+
61+ def upgrade_state (self , new_state ):
62+ if new_state in OrderState :
63+ self .estado = new_state
64+ print (f"El estado del pedido { self .identificador } ha sido actualizado a { self .estado .name } " )
65+ else :
66+ print (f"El pedido { self .identificador } no se pudo enviar." )
67+
68+ def send_order (self ):
69+ if self .estado == OrderState .PENDIENTE :
70+ self .upgrade_state (OrderState .ENVIADO )
71+ else :
72+ print ("El pedido no se pudo enviar porque no esta pendiente" )
73+
74+ def order_delivered (self ):
75+ if self .estado == OrderState .ENVIADO :
76+ self .upgrade_state (OrderState .ENTREGADO )
77+ else :
78+ print (f"El pedido { self .identificador } no se pudo marcar como entregado porque no fue enviado aun" )
79+
80+ def cancel_order (self ):
81+ if self .estado != OrderState .CANCELADO or self .estado != OrderState .ENTREGADO :
82+ self .upgrade_state (OrderState .CANCELADO )
83+ else :
84+ print ("El pedido ya esta cancelado" )
85+
86+
87+
88+ pedido1 = Pedido (identificador = 3 , estado = OrderState .PENDIENTE )
89+
90+ pedido1 .send_order ()
91+ print (f"El pedido { pedido1 .identificador } : Estado - { pedido1 .estado .name } " )
92+
93+ pedido1 .cancel_order ()
94+ print (f"El pedido { pedido1 .identificador } : Estado - { pedido1 .estado .name } " )
95+
96+ pedido1 .order_delivered ()
97+ print (f"El pedido { pedido1 .identificador } : Estado - { pedido1 .estado .name } " )
98+
99+ pedido1 .cancel_order ()
100+ pedido1 .order_delivered ()
0 commit comments