SI un carro esta ocupado, no se puede alquilar hasta que se cumplan los dias del alquiler anterior, seguido de una variable diponibles que mira la cantidad de autos disponibles a alquilar (al haber mas autos solicitados que vehiculos disponibles, se cobra una multa). Si hay vehiculos disponibles corre otro #aleatorio para saber por cuantos dias los va a utilizar. Se calcula el precio del alquiler y se totaliza.
En el codigo se encuentra la clase Auto, aca se inicializa el auto y precio por renta mediante el constructor. seguido de tres metodos:
sumar_ganancia > se encartga de sumar la ganacia que obtuvo cada dia.
restar_dia_por_devolver > resta los dias que rento el auto hasta 0, para hacer el auto nuevamente disponible.
verificar_disponibilidad > verifica si hay un carro disponible para usar.
la salida de este programa es el siguiente.
Código:
DIA #AUTOS DISP ALEAT DIAS COBRO
1 4 1 0.939 4 -
2 - 0 - - +$350
3 - 0 - - +$350
4 - 0 - - +$350
5 - 0 - - +$350
6 4 1 0.189 1 -
7 - 0 - - +$350
8 1 1 0.360 3 -
9 - 0 - - +$350
10 - 0 - - +$350
11 - 0 - - +$350
12 3 1 0.107 1 -
13 - 0 - - +$350
14 0 1 0.748 4 -
15 - 0 - - +$350
Se ganó $3500 en 15 dias simulados.
--------------------------Fin del programa---------------------------
El codigo es el siguiente
Código:
from random import random
class Auto:
def __init__(self, nombre_auto, renta_por_dia):
self.nombre_auto = nombre_auto
self.renta_por_dia = renta_por_dia
self.dias_por_devolucion = 0
self.ganancia = 0
def sumar_ganancia(self):
self.ganancia += self.renta_por_dia
def restar_dia_por_devolver(self):
self.dias_por_devolucion -= 1
def verificar_disponibilidad(self):
disponibilidad = 0 if self.dias_por_devolucion > 0 else 1
return disponibilidad
# ######## INICIO DE EJECUCION ################
vehiculos = {'autoB':350}
dias_de_simulacion = 15
multa=0
i = 1
objetos = []
for nombre_auto, precio_de_renta in vehiculos.items():
# Convertir cada elemento en objeto
objetos.append(Auto(nombre_auto, precio_de_renta))
print('DIA\t#AUTOS\tDISP\tALEAT\tDIAS\tCOBRO')
while i <= dias_de_simulacion:
for autoObj in objetos:
if autoObj.verificar_disponibilidad() > 0:
aleatorio=random()
if aleatorio > 0.61:
nAutos = 4
multa+=600
elif aleatorio > 0.31:
nAutos = 3
multa+=400
elif aleatorio > 0.21:
nAutos = 2
multa+=200
elif aleatorio > 0.10:
nAutos = 1
else:
nAutos = 0
#continue
# Si el vehiculo esta disponible se genera un numero al azar para ese objeto
aleatorioD = random()
if aleatorioD > 0.61:
dias_de_renta = 4
elif aleatorioD > 0.31:
dias_de_renta = 3
elif aleatorioD > 0.21:
dias_de_renta = 2
elif aleatorioD > 0.10:
dias_de_renta = 1
else:
dias_de_renta = 0 # No se rento el auto
autoObj.dias_por_devolucion = dias_de_renta
print('{}\t{}\t1\t{}\t{}\t-'.format(i, nAutos, str(aleatorioD)[0:5], dias_de_renta))
else:
# Si el vehiculo no esta disponible, es porque esta siendo usado, por lo que se cobra el dia
autoObj.sumar_ganancia()
autoObj.restar_dia_por_devolver()
print('{}\t-\t0\t-\t-\t+${}\t-{}'.format(i, autoObj.renta_por_dia,multa))
i += 1
# Total de ganancia
print()
for autoObj in objetos:
print("El {} ganó ${} ".format(autoObj.nombre_auto, autoObj.ganancia))
print("--------------------------Fin del programa---------------------------")
EStoy intentandolo hacer con mas de un auto disponible, aun tengo problemas. ¿Alguien tiene alguna idea de como hacerlo?
si pueden darme la idea asi sea en c++, java, js o en pseucodigo, quedo agradecido con ustedes. GRACIAS