From 84aa2b6ca518bb3356f7040c710fed78015fef76 Mon Sep 17 00:00:00 2001 From: Brais Moure Date: Mon, 24 Jun 2024 21:14:03 +0200 Subject: [PATCH] =?UTF-8?q?Correcci=C3=B3n=20Roadmap=2025=20+=20Nuevo=20ej?= =?UTF-8?q?ercicio=2026?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +-- Roadmap/25 - LOGS/python/mouredev.py | 76 ++++++++++++++++++++++++++++ Roadmap/26 - SOLID SRP/ejercicio.md | 36 +++++++++++++ 3 files changed, 116 insertions(+), 3 deletions(-) create mode 100644 Roadmap/25 - LOGS/python/mouredev.py create mode 100644 Roadmap/26 - SOLID SRP/ejercicio.md diff --git a/README.md b/README.md index 81f25f80e7..97dd6a61e7 100644 --- a/README.md +++ b/README.md @@ -27,8 +27,8 @@ ## Corrección y próximo ejercicio -> #### Lunes 24 de junio de 2024 a las 20:00 (hora España) desde **[Twitch](https://twitch.tv/mouredev)** -> #### Consulta el **[horario](https://discord.gg/EWMJPcUq?event=1249918242370355262)** por país y crea un **[recordatorio](https://discord.gg/EWMJPcUq?event=1249918242370355262)** +> #### Lunes 1 de julio de 2024 a las 20:00 (hora España) desde **[Twitch](https://twitch.tv/mouredev)** +> #### Consulta el **[horario](https://discord.gg/CPKcDD9d?event=1252321976027054111)** por país y crea un **[recordatorio](https://discord.gg/CPKcDD9d?event=1252321976027054111)** ## Roadmap @@ -59,7 +59,8 @@ |22|[FUNCIONES DE ORDEN SUPERIOR](./Roadmap/22%20-%20FUNCIONES%20DE%20ORDEN%20SUPERIOR/ejercicio.md)|[📝](./Roadmap/22%20-%20FUNCIONES%20DE%20ORDEN%20SUPERIOR/python/mouredev.py)|[▶️](https://youtu.be/ABniGtbqAXk)|[👥](./Roadmap/22%20-%20FUNCIONES%20DE%20ORDEN%20SUPERIOR/) |23|[SINGLETON](./Roadmap/23%20-%20SINGLETON/ejercicio.md)|[📝](./Roadmap/23%20-%20SINGLETON/python/mouredev.py)|[▶️](https://youtu.be/cOIcFo_w9hA)|[👥](./Roadmap/23%20-%20SINGLETON/) |24|[DECORADORES](./Roadmap/24%20-%20DECORADORES/ejercicio.md)|[📝](./Roadmap/24%20-%20DECORADORES/python/mouredev.py)|[▶️](https://youtu.be/jxJOjg7gPG4)|[👥](./Roadmap/24%20-%20DECORADORES/) -|25|[LOGS](./Roadmap/25%20-%20LOGS/ejercicio.md)|[🗓️ 24/06/24](https://discord.gg/EWMJPcUq?event=1249918242370355262)||[👥](./Roadmap/25%20-%20LOGS/) +|25|[LOGS](./Roadmap/25%20-%20LOGS/ejercicio.md)|[📝](./Roadmap/25%20-%20LOGS/python/mouredev.py)||[👥](./Roadmap/25%20-%20LOGS/) +|26|[SOLID: PRINCIPIO DE RESPONSABILIDAD ÚNICA](./Roadmap/26%20-%20SOLID%20SRP/ejercicio.md)|[🗓️ 01/07/24](https://discord.gg/CPKcDD9d?event=1252321976027054111)||[👥](./Roadmap/26%20-%20SOLID%20SRP/) ## Instrucciones diff --git a/Roadmap/25 - LOGS/python/mouredev.py b/Roadmap/25 - LOGS/python/mouredev.py new file mode 100644 index 0000000000..5989c8bf50 --- /dev/null +++ b/Roadmap/25 - LOGS/python/mouredev.py @@ -0,0 +1,76 @@ +import logging +import time + +""" +Ejercicio +""" + +logging.basicConfig(level=logging.DEBUG, + format="%(asctime)s - %(levelname)s - %(message)s", + handlers=[logging.StreamHandler()]) + +logging.debug("Esto es un mensaje de DEBUG") +logging.info("Esto es un mensaje de INFO") +logging.warning("Esto es un mensaje de WARNING") +logging.error("Esto es un mensaje de ERROR") +logging.critical("Esto es un mensaje de CRITICAL") + +""" +Extra +""" + + +class TaskManager: + + def __init__(self) -> None: + self.tasks = {} + + def add_task(self, name: str, description: str): + start_time = time.time() + if name not in self.tasks: + self.tasks[name] = description + logging.info(f"Tarea añadida: {name}.") + else: + logging.warning( + f"Se ha intentado añadir una tarea que ya existe: {name}.") + logging.debug(f"Número de tareas: {len(self.tasks)}") + end_time = time.time() + self._print_time(start_time, end_time) + + def delete_task(self, name: str): + start_time = time.time() + if name in self.tasks: + del self.tasks[name] + logging.info(f"Se la eliminado la tarea: {name}.") + else: + logging.error( + f"Se ha intentado eliminar una tarea que no exsite: {name}.") + logging.debug(f"Número de tareas: {len(self.tasks)}") + end_time = time.time() + self._print_time(start_time, end_time) + + def list_tasks(self): + start_time = time.time() + if self.tasks: + logging.info(f"Se va a imprimir la lista de tareas.") + for name, description in self.tasks.items(): + print(f"{name} - {description}") + else: + logging.info("No hay tareas para mostar.") + end_time = time.time() + self._print_time(start_time, end_time) + + def _print_time(self, start_time, end_time): + logging.debug( + f"Tiempo de ejecución: {end_time - start_time:.6f} segundos.") + + +task_manager = TaskManager() +task_manager.list_tasks() +task_manager.add_task("Pan", "Comprar 5 barras de pan") +task_manager.add_task("Python", "Estudiar Python") +task_manager.list_tasks() +task_manager.delete_task("Python") +task_manager.list_tasks() +task_manager.add_task("Pan", "Comprar 5 barras de pan") +task_manager.delete_task("Python") diff --git a/Roadmap/26 - SOLID SRP/ejercicio.md b/Roadmap/26 - SOLID SRP/ejercicio.md new file mode 100644 index 0000000000..e680a09fd8 --- /dev/null +++ b/Roadmap/26 - SOLID SRP/ejercicio.md @@ -0,0 +1,36 @@ +# #26 SOLID: PRINCIPIO DE RESPONSABILIDAD ÚNICA (SRP) +> #### Dificultad: Media | Publicación: 24/06/24 | Corrección: 01/07/24 + +## Ejercicio + +``` +/* + * EJERCICIO: + * Explora el "Principio SOLID de Responsabilidad Única (Single Responsibility + * Principle, SRP)" y crea un ejemplo simple donde se muestre su funcionamiento + * de forma correcta e incorrecta. + * + * DIFICULTAD EXTRA (opcional): + * Desarrolla un sistema de gestión para una biblioteca. El sistema necesita + * manejar diferentes aspectos como el registro de libros, la gestión de usuarios + * y el procesamiento de préstamos de libros. + * Requisitos: + * 1. Registrar libros: El sistema debe permitir agregar nuevos libros con + * información básica como título, autor y número de copias disponibles. + * 2. Registrar usuarios: El sistema debe permitir agregar nuevos usuarios con + * información básica como nombre, número de identificación y correo electrónico. + * 3. Procesar préstamos de libros: El sistema debe permitir a los usuarios + * tomar prestados y devolver libros. + * Instrucciones: + * 1. Diseña una clase que no cumple el SRP: Crea una clase Library que maneje + * los tres aspectos mencionados anteriormente (registro de libros, registro de + * usuarios y procesamiento de préstamos). + * 2. Refactoriza el código: Separa las responsabilidades en diferentes clases + * siguiendo el Principio de Responsabilidad Única. + */ +``` +#### Tienes toda la información extendida sobre el roadmap de retos de programación en **[retosdeprogramacion.com/roadmap](https://retosdeprogramacion.com/roadmap)**. + +Sigue las **[instrucciones](../../README.md)**, consulta las correcciones y aporta la tuya propia utilizando el lenguaje de programación que quieras. + +> Recuerda que cada semana se publica un nuevo ejercicio y se corrige el de la semana anterior en directo desde **[Twitch](https://twitch.tv/mouredev)**. Tienes el horario en la sección "eventos" del servidor de **[Discord](https://discord.gg/mouredev)**. \ No newline at end of file