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.
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:
El significado de las linea de la bitácora son los siguientes
V
2000 significa que vendieron 2000 colones.R
1000 significa que retiró 1000 colones de cacha chica.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.
La salida que se espera del programa en Python sería la siguiente:
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.
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.
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.
El código completo ya lo dejé allá arriba. Aquí vemos la ejecución de este programa en Python para manejar un restaurante:
Por aquí te dejo más tutoriales de Python en mi blog.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
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…
Esta web usa cookies.