Skip to content

Commit d3d7e78

Browse files
authored
Merge pull request #9012 from barrancus/patch-1
#19 - Python
2 parents cf3b198 + 0f6bf29 commit d3d7e78

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
#19 - Python
2+
#
3+
# EJERCICIO:
4+
# Empleando tu lenguaje, explora la definición del tipo de dato
5+
# que sirva para definir enumeraciones (Enum).
6+
# Crea un Enum que represente los días de la semana del lunes
7+
# al domingo, en ese orden. Con ese enumerado, crea una operación
8+
# que muestre el nombre del día de la semana dependiendo del número entero
9+
# utilizado (del 1 al 7).
10+
#
11+
# DIFICULTAD EXTRA (opcional):
12+
# Crea un pequeño sistema de gestión del estado de pedidos.
13+
# Implementa una clase que defina un pedido con las siguientes características:
14+
# - El pedido tiene un identificador y un estado.
15+
# - El estado es un Enum con estos valores: PENDIENTE, ENVIADO, ENTREGADO y CANCELADO.
16+
# - Implementa las funciones que sirvan para modificar el estado:
17+
# - Pedido enviado
18+
# - Pedido cancelado
19+
# - Pedido entregado
20+
# (Establece una lógica, por ejemplo, no se puede entregar si no se ha enviado, etc...)
21+
# - Implementa una función para mostrar un texto descriptivo según el estado actual.
22+
# - Crea diferentes pedidos y muestra cómo se interactúa con ellos.
23+
# /
24+
from random import randint
25+
import datetime
26+
class Counter:
27+
def __iter__(self):
28+
self.a = 1
29+
return self
30+
31+
def __next__(self):
32+
x = self.a
33+
self.a += 1
34+
return x
35+
36+
def serparacion(cadena) -> str:
37+
global contador
38+
print(f'\nEjercicio {next(contador)}. {cadena * 20}')
39+
40+
def basic() -> None:
41+
serparacion("_:_")
42+
week_days = enumerate(('Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo'),start=1)
43+
for contday in range(7):
44+
print(next(week_days))
45+
serparacion("_:_")
46+
search_day = randint(1,7)
47+
for num_day, day in enumerate(('Lunes', 'Martes', 'Miercoles', 'Jueves', 'Viernes', 'Sabado', 'Domingo'),start=1):
48+
if search_day == num_day:
49+
print(f'El día de la semana {search_day} es {day}')
50+
51+
class Pedido:
52+
53+
def __init__(self):
54+
self.identifier = self.gen_cod_ped()
55+
# El estado es un Enum con estos valores: PENDIENTE, ENVIADO, ENTREGADO y CANCELADO.
56+
self.states = ('PENDIENTE', 'ENVIADO', 'ENTREGADO', 'TERMINADO', 'CANCELADO', 'FINALIZADO')
57+
self.change_order = enumerate(self.states,start=1)
58+
self.state = next(self.change_order)
59+
60+
def __str__(self):
61+
return f'El pedido "{self.identifier}" se encuentra "{self.state}"'
62+
63+
def __repr__(self):
64+
return f'Pedido({self.identifier}, {self.state})'
65+
66+
def gen_cod_ped(self) -> str:
67+
tnw = datetime.datetime.now()
68+
code=f'{tnw.strftime("%Y")}{tnw.strftime("%V")}{tnw.strftime("%m")}{tnw.strftime("%d")}{tnw.strftime("%j"):03}{tnw.strftime("%w")}{tnw.strftime("%H")}{tnw.strftime("%M")}{tnw.strftime("%S")}{tnw.strftime("%f")}'
69+
return code
70+
71+
def change_state(self):
72+
try:
73+
self.state = next(self.change_order)
74+
except StopIteration:
75+
print('Ya está en el estado final, no se puede cambiar el estado.')
76+
77+
def force_state(self, state: str) -> bool:
78+
if state not in self.states:
79+
print(f'El valor introducido "{state}" no es correcto.\nSolo se aceptan "{self.states}"')
80+
return False
81+
for ind, expre in enumerate(self.states,start=1):
82+
if expre == state:
83+
if (ind - 1) in self.state:
84+
self.state = next(self.change_order)
85+
print(self)
86+
return True
87+
elif state == 'CANCELADO':
88+
while 'CANCELADO' not in self.state:
89+
self.state = next(self.change_order)
90+
print(self)
91+
return True
92+
else:
93+
print(f'No se permite pasar de {self.state} a {state}')
94+
return False
95+
def print_item(self):
96+
print(self)
97+
98+
def extra() -> None:
99+
100+
serparacion("_:_")
101+
pedidos=[]
102+
103+
def search_ped(option) -> None:
104+
ped_id = input('\nIntroduzca el número de pedido.\nPedido: ')
105+
for pedido in pedidos:
106+
if pedido.identifier == ped_id:
107+
if option == "3":
108+
pedido.change_state()
109+
elif option == "4":
110+
ped_state = (input('Introduzca el nuevo estado del pedido.\nEstado: ')).upper()
111+
if pedido.force_state(ped_state): print('Operación exitosa.')
112+
else:
113+
print('El pedido no existe.')
114+
115+
while True:
116+
print("\nSelecciona una de las siguientes opciones:")
117+
print('1) Para añadir un pedido.')
118+
print('2) Para listar los pedidos.')
119+
print('3) Para modificar estado de un pedido.')
120+
print('4) Para forzar el estado de un pedido.')
121+
print('0) Para Salir.')
122+
option = input('Opcion: ')
123+
match option:
124+
case "0":
125+
print("Programa finlizado.")
126+
break
127+
case "1":
128+
pedidos.append(Pedido())
129+
case "2":
130+
for pedido in pedidos:
131+
pedido.print_item()
132+
case "3":
133+
search_ped(option)
134+
case "4":
135+
search_ped(option)
136+
case _:
137+
print('Seleccione una opción correcta.')
138+
139+
def main() -> None:
140+
basic()
141+
extra()
142+
143+
contador = iter(Counter())
144+
145+
if __name__ == "__main__":
146+
main()

0 commit comments

Comments
 (0)