Python de Cero a Pro - Cap. 12 CLI - Práctica 1
Síguenos con el tutorial
Section titled “Síguenos con el tutorial”Python de Cero a Pro - Cap. 12 CLI - Práctica 1
Volver a Página Principal
Ver Codigo en GitLab
Python de Cero a Pro - Cap. 12 CLI - Práctica 1 🚀
Section titled “Python de Cero a Pro - Cap. 12 CLI - Práctica 1 🚀”¡Bienvenidos al Capítulo 12 de “Python de Cero a Pro”! En esta entrega continuaremos con la programación orientada a objetos (POO) en Python: reutilizando los conceptos aprendidos sobre clases y aplicaremos algunas otras cosas como las condiciones y los bucles también añadiremos diccionarios y algunas otras cosas que hemos visto en el curso! 🛠️
Nuestro Enfoque:
Crearemos una pequeña interfaz cli (qué podremos usar en la terminal).Vamos a usar clases para organizar nuestro código y un diccionario para simular la “memoria aleatoria” de los datos.
Estructura del Proyecto:
Crearemos una estructura de carpetas sencilla:
proyecto_cli/├── main.py # Archivo principal del CLI└── models/ # Carpeta principal de modelos y métodos que serán de uso general ├── productos.py # Clases y funciones para gestionar productos ├── usuarios.py # Clases y funciones para gestionar usuarios └── ventas.py # Clases y funciones para gestionar ventas
Código Inicial (main.py):
import sys #Módulo de sistema en pythonimport os #Módulo de interacción con sistema operativofrom models.productos import Productosfrom models.usuarios import Usuariosfrom models.ventas import Ventas
def mostrar_menu(): print("\n--- Menú Principal ---") print("1. Gestión de Productos") print("2. Gestión de Usuarios") print("3. Gestión de Ventas") print("4. Salir")
def ejecutar_menu(): while True: mostrar_menu() opcion = input("Seleccione una opción: ")
if opcion == '1': Productos().ejecutar() elif opcion == '2': Usuarios().ejecutar() elif opcion == '3': Ventas().ejecutar() elif opcion == '4': print("¡Adiós!") break else: print("Opción inválida. Inténtalo de nuevo.")
if __name__ == "__main__": ejecutar_menu()
Código Inicial (modules/productos.py):
class Productos: def __init__(self): self.productos = {} self.id_producto_siguiente = 1
def agregar_producto(self, nombre, marca, modelo, precio): producto = { "id": self.id_producto_siguiente, "nombre": nombre, "marca" : marca, "modelo": modelo, "precio": precio } self.productos[self.id_producto_siguiente] = producto self.id_producto_siguiente += 1 print(f"Producto '{nombre}' agregado con ID: {self.id_producto_siguiente - 1}")
def mostrar_productos(self): if not self.productos: print("No hay productos registrados.") return print("\n--- Productos Registrados ---") for id_producto, producto in self.productos.items(): print(f"ID: {id_producto}, Nombre: {producto['nombre']}, Marca: {producto['marca']}, Modelo: {producto['modelo']}, Precio: {producto['precio']}")
def ejecutar(self): while True: print("\n--- Menú de Productos ---") print("1. Agregar Producto") print("2. Mostrar Productos") print("3. Volver al Menú Principal") opcion = input("Seleccione una opción: ")
if opcion == '1': nombre = input("Nombre del producto: ") marca = input("Marca del producto: ") modelo = input("Modelo del producto: ") precio = float(input("Precio del producto: ")) self.agregar_producto(nombre, marca, modelo, precio) elif opcion == '2': self.mostrar_productos() elif opcion == '3': break else: print("Opción inválida. Inténtalo de nuevo.")
Código Inicial (models/usuarios.py):
class Usuarios: def __init__(self): self.usuarios = {} self.id_usuario_siguiente = 1
def agregar_usuario(self, nombre, email): usuario = { "id": self.id_usuario_siguiente, "nombre": nombre, "email": email } self.usuarios[self.id_usuario_siguiente] = usuario self.id_usuario_siguiente += 1 print(f"Usuario '{nombre}' agregado con ID: {self.id_usuario_siguiente - 1}")
def mostrar_usuarios(self): if not self.usuarios: print("No hay usuarios registrados.") return print("\n--- Usuarios Registrados ---") for id_usuario, usuario in self.usuarios.items(): print(f"ID: {id_usuario}, Nombre: {usuario['nombre']}, Email: {usuario['email']}")
def ejecutar(self): while True: print("\n--- Menú de Usuarios ---") print("1. Agregar Usuario") print("2. Mostrar Usuarios") print("3. Volver al Menú Principal") opcion = input("Seleccione una opción: ")
if opcion == '1': nombre = input("Nombre del usuario: ") email = input("Email del usuario: ") self.agregar_usuario(nombre, email) elif opcion == '2': self.mostrar_usuarios() elif opcion == '3': break else: print("Opción inválida. Inténtalo de nuevo.")
Código Inicial (models/ventas.py):
class Ventas: def __init__(self): self.ventas = [] self.id_venta_siguiente = 1
def registrar_venta(self, producto_id, cantidad): producto_id = int(producto_id) cantidad = int(cantidad) if producto_id not in self.productos: print("Producto no encontrado.") return venta = { "id": self.id_venta_siguiente, "producto_id": producto_id, "cantidad": cantidad } self.ventas.append(venta) print(f"Venta registrada con ID: {self.id_venta_siguiente - 1}")
def mostrar_ventas(self): if not self.ventas: print("No hay ventas registradas.") return print("\n--- Ventas Registradas ---") for id_venta, venta in self.ventas.items(): print(f"ID: {id_venta}, Producto ID: {venta['producto_id']}, Cantidad: {venta['cantidad']}")
def ejecutar(self): while True: print("\n--- Menú de Ventas ---") print("1. Registrar Venta") print("2. Mostrar Ventas") print("3. Volver al Menú Principal") opcion = input("Seleccione una opción: ")
if opcion == '1': producto_id = input("ID del producto vendido: ") cantidad = input("Cantidad vendida: ") self.registrar_venta(producto_id, cantidad) elif opcion == '2': self.mostrar_ventas() elif opcion == '3': break else: print("Opción inválida. Inténtalo de nuevo.")
Cómo ejecutar:
- Guarda los archivos en la estructura de carpetas que se ha proporcionado.
- Abre una terminal.
- Navega hasta el directorio
proyecto_cli
. - Ejecuta el script principal:
python main.py
¡Y listo! Verás el menú principal. Puedes empezar a agregar productos, usuarios y registrar ventas.
Próximos Pasos:
- Mejorar la Interfaz: Podríamos hacer que la interfaz sea más amigable, por ejemplo, usando colores o un menú más estructurado.
- Validación de Entrada: Añadir validación para asegurarnos de que los datos ingresados son correctos (por ejemplo, que el precio sea un número válido).
- Persistencia de Datos: En lugar de usar diccionarios en memoria, podríamos guardar los datos en un archivo (por ejemplo, un archivo JSON) para que se mantengan incluso después de cerrar el programa.
Conclusión 🎉
Section titled “Conclusión 🎉”En este capítulo, hemos realizado una pequeña práctica sobre la programación orientada a objetos en Python. Hemos utilizado clases, el constructor __init__
, manejamos atributos de instancia y a creamo métodos. Con este pequeño CLI comenzaremos a comprender e introducirnos al análisis de datos en el mundo real practicando con módulos básicos en nuestro propio sistema de ventas. 📈
En los próximos capítulos, exploraremos más a fondo los conceptos de POO, como la herencia, el polimorfismo y la composición, que te permitirán construir aplicaciones aún más sofisticadas. ¡Sigue practicando y experimentando con las clases! 💪📚
Referencias Complementarias
Section titled “Referencias Complementarias”- Documentación Oficial de Python: La guía definitiva para cualquier concepto en Python, incluyendo el manejo de clases, estructuras de control y módulos.
- Tutorial de Real Python sobre Clases: Un excelente recurso con ejemplos prácticos para profundizar en la programación orientada a objetos (POO).
- Tutorial de Python.org sobre Diccionarios: Para entender mejor cómo funcionan los diccionarios, que se usan para simular la base de datos en este proyecto.
- QuePasaLinux: No olvides revisar mi canal para más contenido y ejemplos prácticos sobre estos temas.