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
V
2000 significa que vendieron 2000 colones.R
1000 significa que retiró 1000 colones de cacha chica.- 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:
Por aquí te dejo más tutoriales de Python en mi blog.