python

Python: ejercicio de ventas en restaurantes

En este post de programación en Python te mostraré un ejercicio resuelto que trata sobre las ventas y retiros que se realizan en un restaurante escribiendo órdenes para mostrar el saldo final al terminar el día.

Descripción del ejercicio

El ejercicio para resolver con Python dice así:

La cadena de restaurantes “Ejemplo” le ha solicitado que se cree un programa que les ayude a administrar las ventas del día de cada una de sus sucursales.

Al inicio del programa se debe preguntar cual es el saldo inicial de la sucursal en ese día en particular, luego se empezara a introducir la información de la bitácora de transacciones del día.

Por ejemplo para el día Martes se corrió el programa con un saldo inicial en la cuenta de 250000 colones y luego se introducen las operaciones de la bitácora de la siguiente forma:

  • V 2000
  • V 2000
  • R 1000
  • V 5000
  • Ejecutar

El significado de las linea de la bitácora son los siguientes

  1. V 2000 significa que vendieron 2000 colones.
  2. R 1000 significa que retiró 1000 colones de cacha chica.
  3. Al introducir una linea con la palabra “Ejecutar” indica que ha finalizado la entrada de datos en la bitácora y se debe ejecutar el procesamiento de las ventas y retiros.

Si cuando procesamos una operación de Retiro (R) y la cuenta no cuenta con los fondos suficientes, la operación simplemente debe ser ignorada y continuar con la siguiente operación.

Salida esperada

La salida que se espera del programa en Python sería la siguiente:

  • Total de dinero por ventas realizadas y cantidad de las mismos (3 ventas por un total de 9000 colones).
  • Total de dinero por retiros realizados (1 retiro por un total de 1000 colones)
  • El total de dinero disponible en la cuenta al finalizar de procesar la bitácora (en el caso del ejemplo el valor total seria de 258000 colones)

Se espera y se calificará que el programa se desarrolle utilizando ciclos (for/while), además del uso de funciones (tanto para retiros como para los depósitos).

También se espera que las entradas sean procesadas como un string y se manipulen sus posiciones para obtener la operación y el valor de la misma.

Algoritmo

Al inicio pensé en usar split para separar la cadena, pero como el ejercicio pide trabajo con cadenas mejor utilicé las operaciones con índices de cadenas para separar la orden y el monto.

Ya después de haberlos separado podemos convertir el monto como cadena a flotante, y lo demás es simplemente ir aumentando o disminuyendo el saldo inicial.

Código del ejercicio en Python

Finalmente el código fuente queda así:

# https://parzibyte.me/blog

ORDEN_EJECUTAR = "Ejecutar"
TRANSACCION_VENDER = "V"
TRANSACCION_RETIRAR = "R"


def separar_orden_y_valor(orden):
    if orden == ORDEN_EJECUTAR:
        return (orden, 0)
    transaccion = orden[:1]
    valor = orden[1:]
    return (transaccion, float(valor))


def puede_retirar(retiro, saldo):
    return saldo >= retiro


def imprimir_resultados(ventas_realizadas, total_ventas, retiros_realizados, total_retiros, saldo):
    print(f"{ventas_realizadas} venta(s) por un total de {total_ventas} colones")
    print(f"{retiros_realizados} retiro(s) por un total de {total_retiros} colones")
    print(f"Dinero disponible: {saldo} colones")


def main():
    saldo = float(input("Ingrese saldo inicial:"))
    ventas_realizadas = 0
    total_ventas = 0
    retiros_realizados = 0
    total_retiros = 0
    orden = ""
    while orden != ORDEN_EJECUTAR:
        orden = input("Ingrese la orden: ")
        transaccion, valor = separar_orden_y_valor(orden)
        if transaccion == TRANSACCION_VENDER:
            ventas_realizadas += 1
            total_ventas += valor
            saldo += valor
        elif transaccion == TRANSACCION_RETIRAR:
            if puede_retirar(valor, saldo):
                saldo -= valor
                retiros_realizados += 1
                total_retiros += valor
    imprimir_resultados(ventas_realizadas, total_ventas,
                        retiros_realizados, total_retiros, saldo)


main()

He dividido todo en funciones como el ejercicio lo pide. Ya en la función principal declaro los totales de ventas realizadas así como los retiros.

Luego solicito la orden en la línea 34 con input, la separo en la 35 y comparo el tipo de orden. Si es vender entonces aumento el total de ventas junto con el conteo de las mismas, además de aumentar el saldo.

Si la orden es retirar, compruebo si puede retirar en la línea 41 y en caso de que sí entonces modifico el saldo, los conteos y totales.

Finalmente cuando el ciclo se rompa (eso será cuando se seleccione Ejecutar) imprimo los resultados.

Poniendo todo junto

El código completo ya lo dejé allá arriba. Aquí vemos la ejecución de este programa en Python para manejar un restaurante:

Python – Manejo de ventas y retiros en restaurante – Ejercicio resuelto

Por aquí te dejo más tutoriales de Python en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.