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.
Además, este programa debe implementar las siguientes opciones que van a mostrarse en un menú:
Obviamente cada para opción mencionada se debe programar el funcionamiento. Veamos entonces cómo se resuelve este ejercicio de programación.
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
.
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")
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.
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")
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 = []
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()
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.
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…
Esta web usa cookies.
Ver comentarios
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