1+ """
2+ * EJERCICIO:
3+ * - Muestra ejemplos de creación de todas las estructuras soportadas por defecto en tu lenguaje.
4+ * - Utiliza operaciones de inserción, borrado, actualización y ordenación.
5+ """
6+ # Listas
7+ my_list = ["pera" ,"uva" ,"manzana" , 1 , 2 , 3 , False , True ]
8+ print (type (my_list ))
9+ print (my_list )
10+
11+ #! Accedder a los elementos
12+ print (my_list [0 ]) # pera
13+ print (my_list [- 1 ]) # True
14+ print (my_list [1 :3 ]) # ['uva', 'manzana']
15+ print (my_list [- 5 :]) # [1, 2, 3, False, True]
16+
17+ ### Verificar si un elemento está en la lista
18+ if "uva" in my_list :
19+ print ("La uva está en la lista" )
20+
21+ #! Modificar elementos
22+ my_list [1 :3 ] = "piña" , "limon" # Reemplaza uva Y manzana
23+ print (my_list )
24+
25+ #! Agregar Elementos
26+ #* Agregar un elemento
27+ my_list .insert (1 ,"sandia" )
28+ my_list .append ("elemento agregado al final" )
29+ print (my_list )
30+
31+ #* Agregar una lista a otra lista
32+ my_other_list = ["rosas" , "girasoles" ]
33+ my_list .extend (my_other_list )
34+ print (my_list )
35+
36+ #! Eliminar elementos
37+ #* Eliminar un elemento usano el elemento
38+ my_list .remove ("elemento agregado al final" )
39+
40+ #* Eliminar un elemento usando el índice
41+ my_list .pop (8 )
42+ del my_list [7 ]
43+ print (my_list )
44+
45+ #* Eliminar todos los elemmentos de la lista
46+ my_list .clear ()
47+ print (my_list )
48+
49+ #! Ordenar Listas
50+ lista_numeros = [6 , 1 , 5 , 3 , 4 , 2 ]
51+ print (lista_numeros )
52+
53+ lista_frutas = ["pera" ,"uva" ,"manzana" , "limon" , "sandia" ]
54+ print (lista_frutas )
55+
56+ #* Orenar numericos
57+ lista_numeros .sort ()
58+ print (lista_numeros )
59+
60+ #* Ordenar numericos inversamente
61+ lista_numeros .sort (reverse = True )
62+ print (lista_numeros )
63+
64+ #* Ordenar Alfabéticamente
65+ lista_frutas .sort ()
66+ print (lista_frutas )
67+
68+ #* Ordenar Alfabéticamente inversamente
69+ lista_frutas .sort (reverse = True )
70+ print (lista_frutas )
71+
72+ #* Ordenar por otros criterios (longitud)
73+ lista_frutas .sort (key = lambda x : len (x ))
74+ print (lista_frutas )
75+
76+ # Tuplas
77+ tupla_animales = ("perro" , "gato" , "raton" )
78+ print (type (tupla_animales ))
79+ print (tupla_animales )
80+
81+ ### Acceder a elementos
82+ print (tupla_animales [0 ]) # perro
83+ print (tupla_animales [- 1 ]) # raton
84+ print (tupla_animales [:2 ]) # ('perro', 'gato')
85+ print (tupla_animales [- 2 :]) # ('gato', 'raton')
86+
87+ #! Verificar si existe un dato en una tupla
88+ if "perro" in tupla_animales :
89+ print ("El perro está en la tupla" )
90+
91+ #! Modificar tuplas
92+ """
93+ Las tuplas son inmutables, por lo que no se pueden modificar,
94+ pero si se pueden copiar a iterable (como las listas), modificar y reasignar
95+ ! Esto se puede aplicar para
96+ * modificar un elemmento
97+ * eliminar elemmentos
98+ * agregar elemmentos
99+ * concatenar tuplas
100+ """
101+ # Sets
102+ set_mezclado = {"cebolla" , "tomate" , "ajo" , 1 , 2 , 3 , False , True }
103+ print (type (set_mezclado ))
104+ print (set_mezclado )
105+
106+ #! Acceder a elementos
107+ """
108+ No se puede acceder a elementos de un set por índice o llave
109+ aunque se puede verificar si un elemento se encuentra entro de un set o no
110+ """
111+
112+ if "tomate" in set_mezclado :
113+ print ("El tomate está en el set" )
114+
115+ #! Agregar elementos
116+ #* Agregar un elemento
117+ set_mezclado .add ("papa" )
118+ print (set_mezclado )
119+
120+ #* Agregar varios elementos
121+ especias = {"oregano" , "comino" , "paprika" }
122+ set_mezclado .update (especias ) #Tambien funciona .union()
123+ print (set_mezclado )
124+
125+ #! Eliminar elementos
126+ set_mezclado .remove (True )
127+ set_mezclado .pop () #Pop no perite indice, elimina el primer elemento
128+ print (set_mezclado )
129+
130+ set_mezclado .clear ()
131+ print (set_mezclado )
132+
133+ # Diccionarios
134+ diccionario_ingredientes = {
135+ "tomate" :{
136+ "cantidad" : 2 ,
137+ "categoria" : "verdura" ,
138+ "color" : "rojo" ,
139+ },
140+ "papa" :{
141+ "cantidad" : 1 ,
142+ "categoria" : "verdura" ,
143+ "color" : "amarillo" ,
144+ },
145+ "coco" :{
146+ "cantidad" : 3 ,
147+ "categoria" : "fruta" ,
148+ "color" : "blanco" ,
149+ }
150+ }
151+ print (type (diccionario_ingredientes ))
152+ print (diccionario_ingredientes )
153+
154+ #! Acceder a elementos
155+ print (diccionario_ingredientes ["tomate" ]) # {'cantidad': 2, 'categoria': 'verdura', 'color': 'rojo'}
156+ print (diccionario_ingredientes ["tomate" ]["cantidad" ]) # 2
157+ element = diccionario_ingredientes .get ("coco" )
158+ print (element ) # {'cantidad': 3, 'categoria': 'fruta', 'color': 'blanco'}
159+ print (element .keys ()) # dict_keys(['cantidad', 'categoria', 'color'])
160+ print (element .values ()) # dict_values([3, 'fruta', 'blanco'])
161+
162+ #! Modificar elementos
163+ element ["cantidad" ] = 4
164+ print (element )
165+
166+ element .update ({"cantidad" : 5 , "color" : "cafe" })
167+ print (element )
168+
169+ #! Agregar elementos
170+ diccionario_ingredientes ["cebolla" ] = {
171+ "cantidad" : 1 ,
172+ "categoria" : "verdura" ,
173+ "color" : "morado" ,
174+ }
175+ print (diccionario_ingredientes )
176+
177+ element .update ({"sabor" : "dulce" })
178+ print (element )
179+
180+ #! Eliminar elementos
181+ diccionario_ingredientes .pop ("papa" )
182+ print (diccionario_ingredientes )
183+
184+ diccionario_ingredientes .popitem () #Elimina el último elemento
185+ print (diccionario_ingredientes )
186+
187+ del diccionario_ingredientes ["tomate" ]
188+ print (diccionario_ingredientes )
189+
190+ #! Vaciar Diccionario
191+ element .clear ()
192+ print (element )
193+ """
194+ DIFICULTAD EXTRA (opcional):
195+ * Crea una agenda de contactos por terminal.
196+ * - Debes implementar funcionalidades de búsqueda, inserción, actualización y eliminación de contactos.
197+ * - Cada contacto debe tener un nombre y un número de teléfono.
198+ * - El programa solicita en primer lugar cuál es la operación que se quiere realizar, y a continuación
199+ * los datos necesarios para llevarla a cabo.
200+ * - El programa no puede dejar introducir números de teléfono no númericos y con más de 11 dígitos.
201+ * (o el número de dígitos que quieras)
202+ * - También se debe proponer una operación de finalización del programa.
203+ """
204+
205+ agenda = {}
206+ opciones = ("1" , "2" , "3" , "4" , "0" )
207+
208+ def buscar_contacto (nombre :str ):
209+ if nombre in agenda :
210+ return f"Nombre: { nombre } , Telefono: { agenda [nombre ]} "
211+ return False
212+
213+ def agregar_contacto (nombre :str , telefono :int ):
214+ if not buscar_contacto (nombre .lower ()):
215+ agenda [nombre ] = telefono
216+ return f"{ nombre } agregado correctamente"
217+ return False
218+
219+ def modificar_contacto (nombre :str , telefono :int ):
220+ if buscar_contacto (nombre ):
221+ agenda [nombre ] = telefono
222+ return f"{ nombre } actualizado a { agenda [nombre ]} "
223+ return False
224+
225+ def eliminar_contacto (nombre :str ):
226+ if buscar_contacto (nombre ):
227+ agenda .pop (1 )
228+ return f"{ nombre } eliminado"
229+ return False
230+
231+ def solicitarNombre ():
232+ while True :
233+ nombre = input ("Ingrese el nombre o 0 para salir: " )
234+ if nombre .isdigit ():
235+ print (f"Nombre invalido { nombre } " )
236+ continue
237+ elif nombre == "0" :
238+ return False
239+ return nombre
240+
241+ def solicitarNumero ():
242+ while True :
243+ telefono = input ("Ingrese Telefono o 0 para salir: " )
244+ if telefono .isnumeric () and len (telefono ) == 10 :
245+ return telefono
246+ elif telefono == "0" :
247+ return False
248+ print (f"Numero invalido: { telefono } " )
249+
250+ def interfaz ():
251+ print ("Bienvenido a la agenta de contactos" )
252+
253+ # Ciclo infinito
254+ while True :
255+ # Mostrar opciones
256+ print (f"""
257+ Actualmente hay { len (agenda )} { "contacto" if len (agenda ) < 2 else "contactos" } en la agenda
258+ Inserte la opción deseada:
259+ 1. Buscar contacto
260+ 2. Agregar contacto
261+ 3. Actualizar contacto
262+ 4. Eliminar contacto
263+ 0. Salir
264+ """ )
265+
266+ # Leer la opción y verifica si es válida
267+ entrada = input ("Opción: " )
268+ if entrada not in opciones :
269+ print ("Opción no válida" )
270+ continue
271+
272+ # Salir
273+ if entrada == "0" :
274+ print ("Gracias por usar la agenda, adios" )
275+ break
276+
277+ # Buscar contacto
278+ if entrada == "1" :
279+ print ("Buscar contacto" )
280+ nombre = solicitarNombre ()
281+ contacto = buscar_contacto (nombre )
282+ if contacto :
283+ print (contacto )
284+ else :
285+ print ("Registro no encontrado" )
286+
287+ # Agregar contacto (Mexico, 10 Numeros)
288+ if entrada == "2" :
289+ print ("Agregar contacto" )
290+ nombre = solicitarNombre ()
291+ if nombre :
292+ telefono = solicitarNumero ()
293+ if telefono :
294+ print (agregar_contacto (nombre , telefono ))
295+
296+ # Actualizar contacto
297+ if entrada == "3" :
298+ print ("Actualizar contacto" )
299+ nombre = solicitarNombre ()
300+ if nombre :
301+ contacto = buscar_contacto (nombre )
302+ if not contacto :
303+ print ("Registro no encontrado" )
304+ continue
305+ print (contacto )
306+ telefono = solicitarNumero ()
307+ if telefono :
308+ print (modificar_contacto (nombre , telefono ))
309+
310+ # Eliminar contacto
311+ if entrada == "4" :
312+ print ("Eliminar contacto" )
313+ nombre = solicitarNombre ()
314+ if nombre :
315+ contacto = buscar_contacto (nombre )
316+ if not contacto :
317+ print ("Registro no encontrado" )
318+ continue
319+ print (eliminar_contacto (nombre ))
320+
321+ interfaz ()
0 commit comments