Todo el codigo contenido en este repositorio está bajo la MIT License.
Este proyecto consiste en la abstraccion de un negocio de pizzas para ejemplificar la aplicabilidad de algebra lineal en programacion.
Cada una de las componentes del vector pizza[i] son la cantidad de ingredientes necesarios para crearla.
Representa el numero de unidades vendidas de cada tipo de pizza.
Representa el valor unitario de cada tipo pizza.
Representa la cantidad de ingredientes disponibles.
Representa la cantidad de ingredientes comprados.
import numpy as np
pizzas = np.array([[5,3,3],[4,6,2],[7,4,2]])
ventas = np.array([1,2,3])
precios = np.array([100,200,300])
inventario = np.array([10,10,10])
compras = np.array([1,2,3])
def verificar(vector):
"""Verifica que todos los elementos de un vector sean enteros positivos"""
if (vector < 0).any() or (vector % 1 != 0).any():
return False
return True
Suma del vector compras al vector inventario.
def comprar(self,lista):
"""Agrega ingredientes de la compra al inventario"""
compras = np.array(lista) # Convierte una lista en un vector de numpy
if (verificar(compras)):
self.inventario = self.inventario + compras # Suma el vector compras al inventario
return 0 # Retorna 0 en caso de exito
else:
print("No se puede agregar")
return -1 # Retorna -1 en caso de error
nInventario = comprar(self,lista)
print(f"Inventario+ (numpy):{nInventario} ")
def comprar_i(inventario, compras):
# ciclo iterando el vector desde el indice
resultado = [] # Creacion de un vector vacio para el resultado
for i in range(len(inventario)):
resultado.append(inventario[i] + compras[i]) # Añade la suma de cada componente al nuevo vector
return resultado # Retorna el vector resultante
iInventario = comprar_i(inventario, compras)
print(f"Inventario+ (ciclo): {iInventario}")
Resta del vector inventario al vector pizza[i] fabricada.
def fabricar(self, tipo):
"""Fabrica la pizza descontando los ingredientes del inventario."""
temp = self.inventario - self.pizzas[tipo] # Crea un vector temporal con el resultado
if (verificar(temp)): # Verifica que el vector no contenga numeros negativos
self.inventario = temp # redefine el inventario como el vector temporal
self.ventas[tipo] = self.ventas[tipo] + 1 # Aumenta en una unidad el componente del vector ventas.
return 0 # Retorna 0 en caso de exito
else:
print("No hay suficiente inventario")
return -1 # Retorna -1 en caso de error
nDescuento = fabricar(inventario, 1)
print(f"Inventario- (ciclo): {iDescuento}")
def fabricar_i(inventario, tipo):
# ciclo iterando el vector desde el indice
resultado = [] # Creacion de un vector vacio para el resultado
for i in range(len(inventario)):
resultado.append(inventario[i] - pizza[tipo])# Añade la resta de cada componente al nuevo vector
return resultado # Retorna el vector resultante
iDescuento = fabricar_i(inventario, pizzas[1])
print(f"Inventario- (ciclo): {iDescuento}")
Producto punto entre el vector precio y vector ventas para el calculo de las ganancias totales.
def total_ventas(self):
"""Calcula el valor total de las ventas"""
return np.dot(self.ventas, self.precios) # Retorna el producto punto entre ventas y precios
ntotal_ventas = total_ventas()
print(f"Total ventas (numpy): {total_ventas}")
def total_ventas_i(ventas, precios):
# ciclo iterando el vector desde el indice
total = 0 # Creacion de una variable para almacenar el total
for i in range(len(ventas)):
total += ventas[i] * precios[i]
total = total + (ventas[i] * precios[i]) # Suma al total la multiplicacion de cada componente en la posicion i de ventas y precios.
return total # Retorna el valor resultante
itotal_ventas = total_ventas_i(ventas, precios)
print(f"Total ventas (ciclo): {total_ventas}")
Multiplicacion componente a componente entre el vector precio y el vector ventas para el calculo de las ganancias por cada tipo de pizza.
def ventas_tipo(self):
"""Calcula el valor de las ventas por tipo de pizza"""
return self.ventas * self.precios # Retorna la multiplicacion por componente
nTotal_pizza = ventas_tipo()
print(f"Ventas por pizza (numpy): {nTotal_pizza} ")
def ventas_tipo_i(ventas, precios):
# ciclo iterando el vector desde el indice
resultado = [] # Creacion de un vector vacio para el resultado
for i in range(len(ventas)):
resultado.append(ventas[i] * precios[i])# Añade la multiplicacion de cada componente al nuevo vector
return resultado # Retorna el vector resultante
iTotal_pizza = ventas_tipo_i(ventas, precios)
print(f"Total ventas (ciclo): {iTotal_pizza}")
Libreria para la creacion de la interfaz grafica.
Libreria que contiene los metodos para la creacion de las estructuras y operaciones de algebra lineal implementadas.
Libreria para organizar en tablas ascii la información.
Modulo propio de python para operaciones matematicas avanzadas.
Instalar con pip las librerias requeridas
pip install -r requirements.txt
Si no se tiene pip instalado, revisar la documentación
Para la visualizacion correcta de las tablas construidas se debe utilizar una fuente monoespaciada. esta app hace uso de:
El repositorio contiene estos archivos.
Librearia construida a partir de OOP, contiene las estructuras y metodos explicados anteriormente.
Archivo principal del proyecto, construido a partir de OOP, contiene la estructura de la interfaz grafica, importa la libreria anterior. Este es el archivo que debe ser ejecutado para el inicio de la aplicación.
- Documentación de CustomTkinter
- Ejemplo de formulario GUI con Customtkinter
- Tema (marsh)
- Lista de reproduccion sobre CustomTkinter
- TkinterDesigner (No utilizado en el proyecto)
- Tipografia (Fira Code)
Note
Este proyecto no pretende demostrar buenas practicas de programacion, ni en la libreria construida, ni en su interfaz grafica. Primera y ultima vez utilizando CustomTkinter.