En este post de programación en Python vamos a resolver un ejercicio que gestiona algo así como una tienda, en donde se registran artículos y se realizan ventas; todo esto usando listas o arreglos.
Esto que te muestro es un ejercicio básico de programación en Python, pero de igual modo es útil para los que están aprendiendo Python y quieren mejorar sus habilidades.
La propuesta dice:
Realizar un programa en Python para llevar la gestión de los precios de los artículos de una tienda, así como la cantidad vendida en total de cada artículo para lo cual, habrá que tener 3 vectores.
- Nombres: guardará los nombres de los artículos
- Precios: guardará los precios de los artículos
- Cantidades vendidas: guardará la cantidad vendida en total de cada artículo
Además, este programa debe implementar las siguientes opciones que van a mostrarse en un menú:
- Introducir un artículo nuevo – Registrar un nuevo artículo con nombre y precio
- Hacer una venta – Solicitar nombre de producto y cantidad a vender
- Mostrar información – Mostrar nombre, precio, cantidad vendida e importe de los artículos, además del total
- Borrar un artículo
- Borrar todos los artículos
- Salir
Obviamente cada para opción mencionada se debe programar el funcionamiento. Veamos entonces cómo se resuelve este ejercicio de programación.
Introducir nuevo artículo
Para agregar un artículo simplemente solicitamos el nombre y precio para agregarlos a cada arreglo. En este caso vamos a agregar también un valor por defecto a las cantidades vendidas, que será 0 al inicio.
nombre = input("Nombre del producto: ")
precio = float(input("Precio del producto: "))
cantidad_vendida = 0.0
nombres.append(nombre)
precios.append(precio)
cantidades_vendidas.append(cantidad_vendida)
Fíjate en que para agregar un valor al arreglo o lista en Python usamos append
.
Hacer una venta
Para el caso de hacer una venta debemos solicitar el nombre del producto que se vende. En caso de que no exista, debemos indicarlo; pero en caso contrario debemos solicitar la cantidad que se vende.
Podemos usar in
para saber si una cadena está dentro de una lista en Python, y luego usar index
para obtener el índice (la posición que ocupa) de ese elemento.
nombre_articulo = input("Nombre del artículo que se vende: ")
if nombre_articulo in nombres:
cantidad = float(input("Cantidad vendida: "))
indice = nombres.index(nombre_articulo)
precio = precios[indice]
cantidades_vendidas[indice] += cantidad
print(
f"Se vende(n) {cantidad} {nombre_articulo}. Total: {cantidad * precio}")
else:
print("El artículo no existe")
Mostrar información
Pasemos al siguiente apartado, que es mostrar la información de todos los productos. Es decir, debemos mostrar el nombre, precio y la cantidad vendida.
Además, debemos mostrar el artículo más vendido, artículo menos vendido, artículo con más ingresos y artículo con menos ingresos. Para ello simplemente seguimos el algoritmo de encontrar el mayor y menor elemento en un arreglo.
if len(nombres) <= 0:
print("No hay artículos")
continue
# Los nombres de artículos
articulo_mas_vendido = nombres[0]
articulo_menos_vendido = nombres[0]
articulo_con_mas_ingresos = nombres[0]
articulo_con_menos_ingresos = nombres[0]
# Pero también necesitamos el conteo. Simplemente los inicializamos en un elemento del arreglo
mas_vendido = cantidades_vendidas[0]
menos_vendido = cantidades_vendidas[0]
con_mas_ingresos = cantidades_vendidas[0] * precios[0]
con_menos_ingresos = cantidades_vendidas[0] * precios[0]
print("+--------------------+----------+----------+----------+")
print("|NOMBRE |CANT. |PRECIO |IMPORTE |")
print("+--------------------+----------+----------+----------+")
indice = 0
total = 0
while indice < len(nombres):
nombre = nombres[indice]
precio = precios[indice]
cantidad_vendida = cantidades_vendidas[indice]
importe = precio * cantidad_vendida
print("|{:<20}|{:>10.2f}|{:>10.2f}|{:>10.2f}|".format(
nombre, cantidad_vendida, precio, importe))
print("+--------------------+----------+----------+----------+")
if cantidad_vendida > mas_vendido:
mas_vendido = cantidad_vendida
articulo_mas_vendido = nombre
if cantidad_vendida < menos_vendido:
menos_vendido = cantidad_vendida
articulo_menos_vendido = nombre
if importe > con_mas_ingresos:
con_mas_ingresos = importe
articulo_con_mas_ingresos = nombre
if importe < con_menos_ingresos:
con_menos_ingresos = importe
articulo_con_menos_ingresos = nombre
total += importe
indice += 1
print(
"|--------------------|----------|TOTAL: |{:>10.2f}|".format(total))
print("+--------------------+----------+----------+----------+")
print(
f"Artículo más vendido: {articulo_mas_vendido}, con {mas_vendido} unidades")
print(
f"Artículo menos vendido: {articulo_menos_vendido}, con {menos_vendido} unidades")
print(
f"Artículo con más ingresos: {articulo_con_mas_ingresos}, con {con_mas_ingresos} euros")
print(
f"Artículo con menos ingresos: {articulo_con_menos_ingresos}, con {con_menos_ingresos} euros")
También vamos a mostrar la información e imprimirla; yo lo haré en un formato de tabla usando print para alinear los valores.
Borrar un artículo
Para borrar un artículo debemos eliminar los datos de los 3 vectores, listas o arreglos. Para ello usamos del
. Recuerda que al igual que al vender, necesitamos comprobar que el artículo realmente existe.
nombre_articulo = input("Nombre del artículo que se elimina: ")
if nombre_articulo in nombres:
indice = nombres.index(nombre_articulo)
del nombres[indice]
del precios[indice]
del cantidades_vendidas[indice]
print(f"Se elimina {nombre_articulo}")
else:
print("El artículo no existe")
Eliminar todos los artículos
En el caso de eliminar todos los artículos vamos a declarar los arreglos como vacíos. Antes de hacerlo debemos pedir confirmación al usuario.
if input("Seguro (s/n): ") == "s":
nombres = []
precios = []
cantidades_vendidas = []
Salir
Finalmente veamos la última opción del menú. En este caso invocamos a sys.exit para detener todo el script, aunque si estuviéramos dentro de una función bastaría con un return.
if input("Seguro (s/n): ") == "s":
sys.exit()
Poniendo todo junto
En el inicio del script debemos declarar los 3 arreglos que van a llevar el registro de la información. Después hacemos un ciclo infinito en donde mostramos el menú, realizamos la operación de acuerdo a lo solicitado y seguimos con el ciclo.
El programa termina cuando el usuario selecciona salir. El código completo queda así:
"""
____ _____ _ _ _
| _ \ | __ \ (_) | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___|
__/ | __/ |
|___/ |___/
____________________________________
/ Si necesitas ayuda, contáctame en \
\ https://parzibyte.me /
------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Creado por Parzibyte (https://parzibyte.me).
------------------------------------------------------------------------------------------------
Si el código es útil para ti, puedes agradecerme siguiéndome: https://parzibyte.me/blog/sigueme/
Y compartiendo mi blog con tus amigos
También tengo canal de YouTube: https://www.youtube.com/channel/UCroP4BTWjfM0CkGB6AFUoBg?sub_confirmation=1
------------------------------------------------------------------------------------------------
"""
import sys
nombres = []
precios = []
cantidades_vendidas = []
while True:
print("""
=========================
By Parzibyte
https://parzibyte.me
=========================
""")
eleccion = input("""
1 - Introducir un artículo nuevo
2 - Hacer una venta
3 - Mostrar información
4 - Borrar un artículo
5 - Borrar todos los artículos
6 - Salir
Seleccione: """)
if eleccion == "1":
nombre = input("Nombre del producto: ")
precio = float(input("Precio del producto: "))
cantidad_vendida = 0.0
nombres.append(nombre)
precios.append(precio)
cantidades_vendidas.append(cantidad_vendida)
elif eleccion == "2":
nombre_articulo = input("Nombre del artículo que se vende: ")
if nombre_articulo in nombres:
cantidad = float(input("Cantidad vendida: "))
indice = nombres.index(nombre_articulo)
precio = precios[indice]
cantidades_vendidas[indice] += cantidad
print(
f"Se vende(n) {cantidad} {nombre_articulo}. Total: {cantidad * precio}")
else:
print("El artículo no existe")
elif eleccion == "3":
if len(nombres) <= 0:
print("No hay artículos")
continue
# Los nombres de artículos
articulo_mas_vendido = nombres[0]
articulo_menos_vendido = nombres[0]
articulo_con_mas_ingresos = nombres[0]
articulo_con_menos_ingresos = nombres[0]
# Pero también necesitamos el conteo. Simplemente los inicializamos en un elemento del arreglo
mas_vendido = cantidades_vendidas[0]
menos_vendido = cantidades_vendidas[0]
con_mas_ingresos = cantidades_vendidas[0] * precios[0]
con_menos_ingresos = cantidades_vendidas[0] * precios[0]
print("+--------------------+----------+----------+----------+")
print("|NOMBRE |CANT. |PRECIO |IMPORTE |")
print("+--------------------+----------+----------+----------+")
indice = 0
total = 0
while indice < len(nombres):
nombre = nombres[indice]
precio = precios[indice]
cantidad_vendida = cantidades_vendidas[indice]
importe = precio * cantidad_vendida
print("|{:<20}|{:>10.2f}|{:>10.2f}|{:>10.2f}|".format(
nombre, cantidad_vendida, precio, importe))
print("+--------------------+----------+----------+----------+")
if cantidad_vendida > mas_vendido:
mas_vendido = cantidad_vendida
articulo_mas_vendido = nombre
if cantidad_vendida < menos_vendido:
menos_vendido = cantidad_vendida
articulo_menos_vendido = nombre
if importe > con_mas_ingresos:
con_mas_ingresos = importe
articulo_con_mas_ingresos = nombre
if importe < con_menos_ingresos:
con_menos_ingresos = importe
articulo_con_menos_ingresos = nombre
total += importe
indice += 1
print(
"|--------------------|----------|TOTAL: |{:>10.2f}|".format(total))
print("+--------------------+----------+----------+----------+")
print(
f"Artículo más vendido: {articulo_mas_vendido}, con {mas_vendido} unidades")
print(
f"Artículo menos vendido: {articulo_menos_vendido}, con {menos_vendido} unidades")
print(
f"Artículo con más ingresos: {articulo_con_mas_ingresos}, con {con_mas_ingresos} euros")
print(
f"Artículo con menos ingresos: {articulo_con_menos_ingresos}, con {con_menos_ingresos} euros")
elif eleccion == "4":
nombre_articulo = input("Nombre del artículo que se elimina: ")
if nombre_articulo in nombres:
indice = nombres.index(nombre_articulo)
del nombres[indice]
del precios[indice]
del cantidades_vendidas[indice]
print(f"Se elimina {nombre_articulo}")
else:
print("El artículo no existe")
elif eleccion == "5":
if input("Seguro (s/n): ") == "s":
nombres = []
precios = []
cantidades_vendidas = []
elif eleccion == "6":
if input("Seguro (s/n): ") == "s":
sys.exit()
También te invito a leer más sobre Python en mi blog.
Muchas gracias a sido muy útil, estoy en el proceso de un ejercicio de riesgos reproductivos RRPC, y me salió muy bien
Gracias! me fue muy útil para entender la estructura de un problema que era muy similar a este con la diferencia de que en el otro tenia que agregar diccionarios para los productos