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
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)
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)