Example #1
0
class Gobierno:
    def __init__(self):
        self.cola = ListaLigada()

    def __repr__(self):
        return "\n".join(self.cola)

    def formar_cola(self, pais):
        cf = Medida(*self.cerrar_fronteras(pais))
        ca = Medida(*self.cerrar_aeropuertos(pais))
        mm = Medida(*self.mandar_mascarillas(pais))
        af = Medida(*self.abrir_fronteras(pais))
        if cf.bool:
            self.cola.append(cf)
        elif af.bool:
            self.cola.append(af)
        if ca.bool:
            self.cola.append(ca)
        if mm.bool:
            self.cola.append(mm)
        self.cola = self.cola.msort()

    def cerrar_aeropuertos(self, pais):
        # basandose en la situacion del pais debe determinar si cierra su aeropuerto
        # si la mitad esta infectada o un cuarto esta muerto se cierran
        infectados = pais.porcentaje_infectados
        muertos = pais.porcentaje_muertos
        prioridad = 0.8 * infectados
        return "Cerrar aeropuertos", infectados >= 0.8 or muertos >= 0.2, prioridad

    def cerrar_fronteras(self, pais):
        # basandose en la situacion del self.pais debe determinar si se cierran la fronteras terrestres
        # Se cierran si es que mas del 80% esta infectado o mas del 20% esta muerto
        infectados = pais.porcentaje_infectados
        muertos = pais.porcentaje_muertos
        accion = pais.promedio
        prioridad = accion * infectados
        return "Cerrar fronteras", infectados >= 0.5 or muertos >= 0.25, prioridad

    def mandar_mascarillas(self, pais):
        # si mas de un tercio de la poblacion esta infectada se mandan mascarillas lo que baja
        # la tasa de contagiosidad (multiplica por 0.3 la cantidad aleatoria de infectados)
        infectados = pais.porcentaje_infectados
        prioridad = 0.5 * infectados
        return "Mandar mascarillas", infectados >= 0.33, prioridad

    def abrir_fronteras(self, pais):
        if pais.cura:
            prioridad = 1
        else:
            prioridad = pais.porcentaje_infectados * 0.7
        return "Abrir fronteras", not (self.cerrar_aeropuertos(pais) or
                                       self.cerrar_fronteras(pais)), prioridad
Example #2
0
 def contagio_entre_paises(self):
     pais_que_contagia = ListaLigada()
     lista_contagiados = ListaLigada()
     pais_contagiado = False
     for pais in self:
         if pais.contagia:
             pais_que_contagia.append(pais.nombre)
             via = randint(0, 1)
             if via == 0:
                 num = pais.contagiar_aire()
                 pais_contagiado = pais.aeropuerto[num].title()
             else:
                 num = pais.contagiar_tierra()
                 pais_contagiado = pais.vecinos[num].title()
     if pais_contagiado:
         for pais in self:
             if pais.nombre == pais_contagiado and not pais.esta_infectado:
                 pais.infectados = 10
                 lista_contagiados.append(pais.nombre)
     return ListaLigada(lista_contagiados, pais_que_contagia)
Example #3
0
        self.prioridad = prioridad

    def __repr__(self):
        return str(self.nombre) + "\n Nivel prioridad: {}".format(
            self.prioridad)

    def __eq__(self, other):
        return self.bool and other.bool and self.prioridad == other.prioridad

    def __gt__(self, other):
        return self.bool and other.bool and self.prioridad > other.prioridad

    def __lt__(self, other):
        return self.bool and other.bool and self.prioridad < other.prioridad

    def __le__(self, other):
        return self.bool and other.bool and self.prioridad <= other.prioridad

    def __ge__(self, other):
        return self.bool and other.bool and self.prioridad >= other.prioridad

    def __ne__(self, other):
        return self.bool and other.bool and self.prioridad != other.prioridad


if __name__ == "__main__":
    lista = ListaLigada()
    for i in range(10):
        lista.append(Medida("", True, i + randint(0, 10)))
    lista = lista.msort()
    print(lista)
 def pasar_dia(self):
     # tiene que considerar muertes de humanos, infecciones de humanos,
     # traslado de la infeccion a otro pais, mejora de la cura,
     # traslado de la cura, cerrar aeropuertos o fronteras
     # y entrega de mascarillas
     infectados_iniciales = self.planeta.infectados
     muertos_iniciales = self.planeta.muertos
     cerraron_aeropuertos = ListaLigada()
     cerraron_fronteras = ListaLigada()
     entrego_mascarillas = ListaLigada()
     for pais in self.planeta:
         pais.gob.formar_cola(pais)
         try:
             medidas = pais.gob.cola[0:3]
             for i in range(3):
                 pais.gob.cola.pop(0)
         except IndexError:
             medidas = pais.gob.cola[0:]
             pais.gob.cola.clear()
         for medida in medidas:
             if medida.nombre == "Cerrar aeropuertos":
                 for otro in self.planeta:
                     if otro.nombre in pais.aeropuerto:
                         otro.aeropuerto.remove(pais.nombre)
                 pais.aeropuerto.clear()
                 cerraron_aeropuertos.append(pais.nombre)
             elif medida.nombre == "Cerrar fronteras":
                 for otro in self.planeta:
                     if otro.nombre in pais.vecinos:
                         otro.vecinos.remove(pais.nombre)
                 pais.vecinos.clear()
                 cerraron_fronteras.append(pais.nombre)
             elif medida.nombre == "Abrir fronteras":
                 pais.aeropuerto, pais.vecinos = pais.respaldos
                 for otro in self.planeta:
                     if otro.nombre in pais.vecinos:
                         otro.vecinos.append(pais.nombre)
                     elif otro.nombre in pais.aeropuerto:
                         otro.aeropuerto.append(pais.nombre)
             elif medida.nombre == "Mandar mascarillas":
                 pais.infeccion.contagiosidad *= 0.3
                 entrego_mascarillas.append(pais.nombre)
         pais.muerte()
         pais.contagio_interno()
     self.planeta.descubrimiento_infeccion()
     muertos_dia = self.planeta.muertos - muertos_iniciales
     infectados_dia = self.planeta.infectados - infectados_iniciales
     datos_dia = ListaLigada(
         "Infectados del dia: {}".format(infectados_dia),
         "Muertos del dia : {}".format(muertos_dia))
     contagio_paises = self.planeta.contagio_entre_paises()
     if len(contagio_paises[0]) > 0 and len(contagio_paises)[1] > 0:
         for nombre_pais, otro_pais in contagio_paises:
             print("{0} contagio a {1}".format(nombre_pais, otro_pais))
     contagio_paises = contagio_paises[0].msort()
     cerraron_aeropuertos = cerraron_aeropuertos.msort()
     cerraron_fronteras = cerraron_fronteras.msort()
     entrego_mascarillas = entrego_mascarillas.msort()
     if self.planeta.cura >= 100 and not self.planeta.implantado:
         self.planeta.implantar_cura()
     if self.planeta.descubierto:
         self.planeta.progreso_cura()
     self.planeta.actualizar_promedio()
     self.sucesos_dia = "\n".join(datos_dia) + "\nPaises infectados hoy:\n " + "\n".join(contagio_paises) + \
                        "\nPaises que cerraron fronteras:\n" + "\n".join(cerraron_fronteras) + \
                        "\nPaises que cerraron aeropuerto: \n" + "\n".join(cerraron_aeropuertos) + "\nPaises que" \
                        " repartieron mascarillas: \n" + "\n".join(entrego_mascarillas)