Alquiler de autos, python tener mas de un auto disponible

Iniciado por makarov, 17 Octubre 2018, 19:35 PM

0 Miembros y 1 Visitante están viendo este tema.

makarov

Esta aplicacion simula un sistema para alquilar vehiculos, cada dia un cliente puede alquilar x cantidad de vehiculos (este valor esta dado por un #aleatoro)
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.

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

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