Skip to content

Commit b4b9ff6

Browse files
authored
Merge branch 'mouredev:main' into pascal
2 parents 31082dc + 55e3908 commit b4b9ff6

File tree

5 files changed

+859
-0
lines changed

5 files changed

+859
-0
lines changed
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
"""
2+
Estrutura de datos
3+
"""
4+
5+
# Listas
6+
my_list = [] # Constructor
7+
my_other_list = list() # Constructor
8+
my_list.append("manzana") # Inserción
9+
my_list.extend(["pera","uva"]) # Inserción
10+
print(my_list)
11+
del my_list[1] # Borrado
12+
print(my_list)
13+
my_list.remove("uva") # Borrado
14+
print(my_list)
15+
my_list[0] = "lechuga" # Actualización
16+
print(my_list)
17+
my_list.extend(["tomate","queso","mortadela","mayonesa"])
18+
print(my_list)
19+
my_list.sort() # Ordenación
20+
print(my_list)
21+
22+
# Tuplas
23+
my_tuple = () # Constructor
24+
my_other_tuple = tuple() # Constructor
25+
my_thrith_tuple = 10, 2, 1 # Constructor
26+
my_fourth_tuple = ("Lunes", "Miercoles", "Viernes") # Constructor
27+
print(type(my_thrith_tuple))
28+
print(my_thrith_tuple[2]) # Acceso
29+
my_thrith_tuple = tuple(sorted(my_thrith_tuple)) # Ordenación
30+
print(my_thrith_tuple)
31+
print(type(my_thrith_tuple))
32+
33+
# Conjuntos/Sets
34+
my_set = set() # Constructor
35+
my_other_set = {1,"Ottawa","Roma"} # Constructor
36+
print(my_other_set)
37+
my_other_set.add("Madrid") # Inserción
38+
print(my_other_set)
39+
my_other_set.remove(1) # Borrado
40+
print(my_other_set)
41+
my_other_set = set(sorted(my_other_set)) # No se puede ordenar por definición
42+
print(my_other_set)
43+
print(type(my_other_set))
44+
45+
# Diccionarios
46+
my_dict = dict()
47+
my_other_dict = {}
48+
my_thrith_dict = {
49+
"english":"hello world!",
50+
"español":"¡Hola mundo!"
51+
}
52+
print(my_thrith_dict)
53+
my_thrith_dict["Deutsch"] = "Hallo Welt" # Inserción
54+
print(my_thrith_dict)
55+
my_thrith_dict["Deutsch"] = "Hallo Welt!" # Actualización
56+
print(my_thrith_dict)
57+
del my_thrith_dict["Deutsch"] # Actualización
58+
print(my_thrith_dict)
59+
my_thrith_dict = dict(sorted(my_thrith_dict.items())) # Ordenación
60+
print(my_thrith_dict)
61+
print(type(my_thrith_dict))
62+
63+
64+
"""
65+
Ejercicio Extra
66+
"""
67+
68+
contact_list = {}
69+
70+
def find_contact(name: str, contact_list: dict) -> list:
71+
if name in contact_list:
72+
print(f"El numero de telefono de {name} es {contact_list[name]}")
73+
else:
74+
print(f"No existe el contacto {name}")
75+
return contact_list
76+
77+
def insert_contact(name: str, contact_list: dict):
78+
if name not in contact_list:
79+
number = input("Ingrese el número: ")
80+
if number.isdigit() and len(number) > 0 and len(number) < 11:
81+
contact_list[name] = number
82+
print(f"Contacto: {name}: {number} agregado")
83+
else:
84+
print("Numero invalido. \nDebes introducir un numero de telefono con un maximo de 11 dígitos")
85+
else:
86+
print("El contacto ya existe")
87+
return contact_list
88+
89+
90+
def refresh_contact(name: str, contact_list: dict):
91+
if name in contact_list:
92+
number = input("Ingrese el nuevo número: ")
93+
if number.isdigit() and len(number) > 0 and len(number) < 11:
94+
contact_list[name] = number
95+
print(f"Contacto: {name}: {number} actualizado")
96+
else:
97+
print("Numero invalido. \nDebes introducir un numero de telefono con un maximo de 11 dígitos")
98+
else:
99+
print("El contacto no existe")
100+
return contact_list
101+
102+
def del_contact(name: str, contact_list: dict):
103+
if name in contact_list:
104+
del contact_list[name]
105+
print(f"Contacto: {name} eliminado")
106+
else:
107+
print("El contacto no existe")
108+
return contact_list
109+
110+
def show_menu():
111+
print("*"*20)
112+
print("AGENDA DE CONTACTOS.")
113+
print("Operaciones:")
114+
print("1. Buscar contacto.")
115+
print("2. Insertar contacto.")
116+
print("3. Actualizar contacto")
117+
print("4. Borrar contacto")
118+
print("5. Salir")
119+
120+
def my_agenda(action=0):
121+
contact_list = {}
122+
123+
while True:
124+
show_menu()
125+
action = input("Opción: ")
126+
match action:
127+
case "1":
128+
contact_list = find_contact(
129+
input("Ingrese el nombre del contacto: "),
130+
contact_list=contact_list
131+
)
132+
case "2":
133+
contact_list = insert_contact(
134+
input("Ingrese el nombre del contacto: "),
135+
contact_list=contact_list
136+
)
137+
case "3":
138+
contact_list = refresh_contact(
139+
input("Ingrese el nombre del contacto: "),
140+
contact_list=contact_list
141+
)
142+
case "4":
143+
contact_list = del_contact(
144+
input("Ingrese el nombre del contacto: "),
145+
contact_list=contact_list
146+
)
147+
case "5":
148+
print("Saliendo...")
149+
break
150+
case _:
151+
print("Valor invalido, ingrese una opción del 1 al 5")
152+
input("\n\nPulse enter para continuar")
153+
154+
my_agenda()
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#1 Estructuras de datos soportadas por defecto en Python
2+
3+
# Listas (mutables, ordenadas)
4+
lista_numeros = [5, 2, 8, 1, 9]
5+
print("Lista original:", lista_numeros)
6+
7+
# Inserción
8+
lista_numeros.append(3) # Agrega al final
9+
lista_numeros.insert(2, 7) # Inserta en una posición específica
10+
print("Lista después de inserciones:", lista_numeros)
11+
12+
# Borrado
13+
del lista_numeros[0] # Borra por índice
14+
lista_numeros.remove(8) # Borra por valor
15+
print("Lista después de borrados:", lista_numeros)
16+
17+
# Actualización
18+
lista_numeros[1] = 4
19+
print("Lista después de actualización:", lista_numeros)
20+
21+
# Ordenación
22+
lista_numeros.sort() # Ordena de forma ascendente
23+
print("Lista ordenada:", lista_numeros)
24+
25+
# Tuplas (inmutables, ordenadas)
26+
tupla_colores = ("rojo", "verde", "azul")
27+
print("\nTupla original:", tupla_colores)
28+
29+
# Conjuntos (mutables, no ordenados, sin duplicados)
30+
conjunto_frutas = {"manzana", "pera", "banana"}
31+
print("\nConjunto original:", conjunto_frutas)
32+
33+
conjunto_frutas.add("uva") # Inserción
34+
conjunto_frutas.remove("pera") # Borrado
35+
print("Conjunto después de operaciones:", conjunto_frutas)
36+
37+
# Diccionarios (mutables, no ordenados, pares clave-valor)
38+
diccionario_edades = {"Ana": 25, "Carlos": 30, "Laura": 22}
39+
print("\nDiccionario original:", diccionario_edades)
40+
41+
diccionario_edades["Pedro"] = 35 # Inserción
42+
del diccionario_edades["Carlos"] # Borrado
43+
diccionario_edades["Laura"] = 23 # Actualización
44+
print("Diccionario después de operaciones:", diccionario_edades)
45+
46+
# Ejercicio
47+
48+
contactos = {} # Diccionario para almacenar los contactos
49+
50+
def agregar_contacto(nombre, telefono):
51+
if nombre in contactos:
52+
print("El contacto ya existe.")
53+
else:
54+
contactos[nombre] = telefono
55+
print("Contacto agregado exitosamente.")
56+
57+
def buscar_contacto(nombre):
58+
if nombre in contactos:
59+
print(f"El número de teléfono de {nombre} es: {contactos[nombre]}")
60+
else:
61+
print("El contacto no existe.")
62+
63+
def actualizar_contacto(nombre, nuevo_telefono):
64+
if nombre in contactos:
65+
contactos[nombre] = nuevo_telefono
66+
print("Contacto actualizado exitosamente.")
67+
else:
68+
print("El contacto no existe.")
69+
70+
def eliminar_contacto(nombre):
71+
if nombre in contactos:
72+
del contactos[nombre]
73+
print("Contacto eliminado exitosamente.")
74+
else:
75+
print("El contacto no existe.")
76+
77+
while True:
78+
operacion = input("¿Qué deseas hacer? (agregar, buscar, actualizar, eliminar, salir): ")
79+
80+
if operacion == "agregar":
81+
nombre = input("Nombre del contacto: ")
82+
telefono = input("Teléfono del contacto: ")
83+
agregar_contacto(nombre, telefono)
84+
elif operacion == "buscar":
85+
nombre = input("Nombre del contacto: ")
86+
buscar_contacto(nombre)
87+
elif operacion == "actualizar":
88+
nombre = input("Nombre del contacto: ")
89+
nuevo_telefono = input("Nuevo teléfono del contacto: ")
90+
actualizar_contacto(nombre, nuevo_telefono)
91+
elif operacion == "eliminar":
92+
nombre = input("Nombre del contacto: ")
93+
eliminar_contacto(nombre)
94+
elif operacion == "salir":
95+
break
96+
else:
97+
print("Operación no válida.")
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import logging
2+
3+
"""
4+
* EJERCICIO:
5+
* Explora el concepto de "logging" en tu lenguaje. Configúralo y muestra
6+
* un ejemplo con cada nivel de "severidad" disponible.
7+
"""
8+
logging.basicConfig(level=logging.DEBUG,
9+
format="%(asctime)s -- %(levelname)s: %(message)s",
10+
datefmt="%d/%m/%Y - %H:%M:%S",
11+
handlers=[logging.StreamHandler()])
12+
13+
logging.debug("Info para hacer debugging")
14+
logging.info("Todo funciona correctamente")
15+
logging.warning("Ha pasado algo inesperado o está a punto de ocurrir algo")
16+
logging.error("Error, no se ha podido realizar la acción")
17+
logging.critical("Error grave, posiblemente el programa no pueda continuar")
18+
19+
"""
20+
* DIFICULTAD EXTRA (opcional):
21+
* Crea un programa ficticio de gestión de tareas que permita añadir, eliminar
22+
* y listar dichas tareas.
23+
* - Añadir: recibe nombre y descripción.
24+
* - Eliminar: por nombre de la tarea.
25+
* Implementa diferentes mensajes de log que muestren información según la
26+
* tarea ejecutada (a tu elección).
27+
* Utiliza el log para visualizar el tiempo de ejecución de cada tarea. DECORADORES??
28+
"""
29+
from time import sleep
30+
import time
31+
32+
def task_number_decorator(function):
33+
def original_function(tasks:list):
34+
result = function(tasks)
35+
logging.debug(f"Número de tareas: {len(tasks)}")
36+
return result
37+
return original_function
38+
39+
def time_decorator(function):
40+
def original_function(*args):
41+
start_time = time.time()
42+
result = function(*args)
43+
end_time = time.time()
44+
print(f"La ejecución ha tardado {end_time - start_time:.6} segundos")
45+
print("\n")
46+
sleep(1)
47+
return result
48+
return original_function
49+
50+
@time_decorator
51+
@task_number_decorator
52+
def add_task(tasks:list):
53+
task:dict = {"name":"","description":""}
54+
task["name"] = input("Dime el nombre para esta tarea: ")
55+
for element in tasks: #busco si la tarea ya existe en el sistema
56+
if element["name"] == task["name"]:
57+
logging.warning("La tarea ya existe en el sistema")#si existe lanzo un logging.error
58+
break
59+
else: #si no existe añado la descripción y continúa la ejecución
60+
task["description"] = input("Y ahora la descripción: ")
61+
tasks.append(task)
62+
logging.info(f"Tarea {task["name"]} guardada en el sistema.")
63+
return tasks
64+
65+
@time_decorator
66+
@task_number_decorator
67+
def erase_task(tasks:list):
68+
if len(tasks) == 0:
69+
logging.warning(f"No hay tareas registradas en el sistema.")
70+
else:
71+
name:str = input("Dime el nombre de la tarea que quieres borrar: ")
72+
for element in tasks:
73+
if element["name"] == name:
74+
tasks.remove(element)
75+
logging.error(f"-- La tarea {name} ha sido borrada del sistema.")
76+
break
77+
else:
78+
logging.error(f"La tarea {name} no existe en el sistema.")
79+
return tasks
80+
81+
@time_decorator
82+
def list_tasks(tasks):
83+
if len(tasks) == 0:
84+
logging.warning("No hay tareas registradas en el sistema")
85+
else:
86+
print("Estas son las tareas que hay en el sistema:")
87+
for element in tasks:
88+
print(f" - Nombre: {element["name"]}\n - Descripción: {element["description"]}\n")
89+
90+
91+
print("\n\nTe doy la bienvenida al progranma de gestión de tareas")
92+
tasks = list() #uso una lista aunque lo suyo sería usar un archivo externo para el log
93+
#esta lista va a contener diccionarios con los elementos name y description.
94+
while True:
95+
option = input("Por favor elije una de las opciones:\n - Añadir tarea(A)\n - Listar tareas(L)\n - Eliminar tarea(E)\n - Salir(S)\nTu opción --->").upper()
96+
if option == "A":
97+
add_task(tasks)
98+
elif option == "E":
99+
erase_task(tasks)
100+
elif option == "L":
101+
list_tasks(tasks)
102+
elif option == "S":
103+
print("Gracias por usar el sistema. Hasta pronto.")
104+
sleep(1)
105+
break
106+
else:
107+
print("La opción no es correcta\n")
108+
sleep(1)

0 commit comments

Comments
 (0)