Skip to content

Python de Cero a Pro - Cap. 12 CLI - Práctica 1

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):

main.py
import sys #Módulo de sistema en python
import os #Módulo de interacción con sistema operativo
from models.productos import Productos
from models.usuarios import Usuarios
from 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):

models/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):

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):

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:

  1. Guarda los archivos en la estructura de carpetas que se ha proporcionado.
  2. Abre una terminal.
  3. Navega hasta el directorio proyecto_cli.
  4. 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.

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! 💪📚