示例#1
0
    def estad_resumen_diario(self):
        '''
        Actualiza los totales de gente infectada y gente muerta y las listas de paises en distintas situaciones.
        Crea un string con el resumen de estadisticas del dia anterior
        '''

        # Calcula el total de muertos y el total de infectados del mundo.
        # Se les restan los totales del dia anterior para obtener la cantidad
        # diaria.
        muertos_totales_anterior = self.muertos_totales
        infectados_totales_anterior = self.infectados_totales
        self.muertos_totales = 0
        self.infectados_totales = 0
        for pais in self.lista_paises:
            self.muertos_totales += pais.muertos
            self.infectados_totales += pais.infectados
        infectados_del_dia = self.infectados_totales - infectados_totales_anterior
        muertos_del_dia = self.muertos_totales - muertos_totales_anterior

        # Ojo tengo que asegurarme que la sobrecarga resta solo mantenga los elementos que  estan en la primera lista y no en la segunda, pero no al reves.
        # Esto para evitar que aparezcan en la lista los paises que recibieron
        # la cura.

        lista_tmp = ListaLigada(
            filter(lambda x: x.aeropuerto == False, self.lista_paises))
        aeropuertos_cerrados_dia = ', '.join(lista_tmp -
                                             self.paises_aeropuertos_cerrados)
        self.paises_aeropuertos_cerrados = lista_tmp

        lista_tmp = ListaLigada(filter(lambda x: x.frontera,
                                       self.lista_paises))
        fronteras_cerradas_dia = ', '.join(lista_tmp -
                                           self.paises_fronteras_cerradas)
        self.paises_fronteras_cerradas = lista_tmp

        lista_tmp = ListaLigada(
            filter(lambda x: x.infectado, self.lista_paises))
        paises_infectados_dia = ', '.join(lista_tmp - self.paises_infectados)
        self.paises_infectados = lista_tmp

        lista_tmp = ListaLigada(
            filter(lambda x: x.mascarillas, self.lista_paises))
        paises_mascarillas_dia = ', '.join(lista_tmp -
                                           self.paises_con_mascarillas)
        self.paises_con_mascarillas = lista_tmp

        del lista_tmp

        self.resumen_del_dia = ('El dia de ayer...\n'
                                'Se infectaron: {0} personas.\n'
                                'Murieron: {1} personas.\n'
                                'La infeccion llego a: {2}\n'
                                'Se cerraron lo aeropuertos de: {3}\n'
                                'Se cerraron las fronteras de: {4}\n'
                                'Se entregaron mascarillas en: {5}\n'.format(
                                    infectados_del_dia, muertos_del_dia,
                                    paises_infectados_dia,
                                    aeropuertos_cerrados_dia,
                                    fronteras_cerradas_dia,
                                    paises_mascarillas_dia))
示例#2
0
def importar_datos(archivo_csv, simbolo=','):
    '''
    Recibe como parametro el directorio o el nombre de un archivo ".csv"
    Retorna una lista de listas (matriz) con los datos del arhivo.
    '''
    with open(archivo_csv, 'r') as archivo:
        lista_archivo = ListaLigada()
        for linea in archivo:
            # esta funcion retorna una ListaLigada
            lista_linea = split(linea.strip('\n'), simbolo)
            lista_archivo.append(lista_linea)
    return lista_archivo
示例#3
0
 def desplegar_menu_principal(self):
     '''Despliega las opciones diarias que tiene un jugador'''
     lista1 = ListaLigada(
         'Pasar el Dia',
         'Estadisticas',
         'Guardar Estado',
         'Salir')
     lista2 = ListaLigada(
         self.pasar_dia,
         self.desplegar_menu_estadisticas,
         self.guardar_estado,
         self.terminar)
     Menu(lista1, lista2).menu()
示例#4
0
 def comenzar(self):
     '''
     Si hay una partida guardada pregunta al usuario si abirla o crear una nueva.
     Si no hay una partida guardada le avisa al usuario y comienza una nueva partida.
     '''
     if path.isfile('partida_guardada.csv'):
         lista1 = ListaLigada(
             'Comenzar Nueva Partida',
             'Comenzar Partida Guardada')
         lista2 = ListaLigada(self.partida_nueva, self.partida_guardada)
         Menu(lista1, lista2).menu()
     else:
         print('No hay partidas guardadas. \nSe ha iniciado una nueva partida.\n')
         self.partida_nueva()
示例#5
0
 def desplegar_menu_estadisticas(self):
     '''Despliega las opciones que tiene el jugador cuando desea ver las estadisticas'''
     lista1 = ListaLigada(
         'Resumen del Dia',
         'Por Pais',
         'Global',
         'Muertes e Infecciones por Dia',
         'Promedio Muertes e Infecciones')
     m = self.mundo
     lista2 = ListaLigada(
         m.mostrar_resumen_diario(),
         m.mostrar_estad_por_pais(),
         m.estad_global(),
         m.muertes_infecciones_dias(),
         m.prom_muertes_infecciones())
     Menu(lista1, lista2).menu()
示例#6
0
 def __init__(self, tipos='str', solicitud_input='>>> ',
              mensaje_error='Input Incorrecto, volver a ingresar'):
     self.solicitud_input = solicitud_input
     if isinstance(tipos, str):
         self.lista = ListaLigada(tipos)
     elif isinstance(tipos, list) or isinstance(tipos, ListaLigada):
         self.lista = tipos
     self.mensaje_error = mensaje_error
     self.entrada = ''
示例#7
0
    def estad_global(self):

        self.paises_limpios = ListaLigada(
            filter(lambda x: x.infectado(), self.lista_paises))
        self.paises_muertos = ListaLigada(
            filter(lambda x: x.muerto(), self.lista_paises))

        poblacion_total = sum(map(lambda x: x.poblacion, self.lista_paises))
        muertos_totales = sum(map(lambda x: x.muertos, self.lista_paises))
        vivos_totales = poblacion_total - muertos_totales

        print('Paises limpios:            \n{0}\n'
              'Paises infectados:         \n{1}\n'
              'Paises muertos:            \n{2}\n'
              'Poblacion total viva       \n{3:11}'
              'Poblacion total infectada: \n{4:11}'
              'Poblacion total sana:      \n{5:11}'.format(
                  ', '.join(self.paises_limpios),
                  ', '.join(self.paises_infectados),
                  ', '.join(self.paises_muertos), vivos_totales,
                  self.infetados_totales, self.muertos_totales))
示例#8
0
 def partida_guardada(self):
     '''
     Como es una partida ya creada no llama al generador de conexiones aereas.
     Llama al metodo que carga los datos de las conexiones en los grafos correspondientes
     Lee el archivo 'partida_guardada.csv' y crea objetos de la clase Pais con cada linea del archivo.
     '''
     self.cargar_conexiones()
     self.mundo.lista_paises = ListaLigada()
     for datos_pais in importar_datos('partida_guardada.csv'):
         if datos_pais[0] == 'Pais':
             pass
         else:
             nuevo_pais = Pais(*datos_pais)
             self.mundo.lista_paises.append(nuevo_pais)
示例#9
0
 def partida_nueva(self):
     '''
     LLama a la funcion que genera las conexiones aereas.
     Llama al metodo que carga los datos de las conexiones en los grafos correspondientes
     Lee el archivo 'population.csv' y crea objetos de la clase Pais con cada linea del archivo.
     '''
     generate_connections()
     self.cargar_conexiones()
     self.mundo.lista_paises = ListaLigada()
     for datos_pais in importar_datos('population.csv'):
         if datos_pais[0] == 'Pais':
             pass
         else:
             nuevo_pais = Pais(*datos_pais)
             self.mundo.lista_paises.append(nuevo_pais)
示例#10
0
 def establecer_conexiones_aereas(self):
     '''Crea un grafo de listas de adyacencia con las conexiones aereas'''
     self.grafo_aereo = Diccionario()
     for datos_fronteras_aereas in importar_datos('random_airports.csv'):
         if datos_fronteras_aereas[0][:3] == '':
             datos_fronteras_aereas[0] = datos_fronteras_aereas[0][3:]
         if datos_fronteras_aereas[0] == 'Pais 1':
             pass
         else:
             if datos_fronteras_aereas[0] in self.grafo_aereo:
                 self.grafo_aereo[datos_fronteras_aereas[0]].append(
                     datos_fronteras_aereas[1])
             else:
                 self.grafo_aereo[datos_fronteras_aereas[0]] = ListaLigada(
                     datos_fronteras_aereas[1])
示例#11
0
    def __init__(self):
        self.propuestas = ListaLigada()
        self.grafo_terrestre = None
        self.grafo_aereo = None

        self.infectados_totales = 0
        self.muertos_totales = 0
        self.infectados_totales = 0

        # litas
        self.lista_paises = ListaLigada()
        self.paises_infectados = ListaLigada()
        self.paises_aeropuertos_cerrados = ListaLigada()
        self.paises_fronteras_cerradas = ListaLigada()
        self.paises_con_mascarillas = ListaLigada()
        self.paises_limpios = ListaLigada()
        self.paises_muertos = ListaLigada()

        # estadisticas
        self.resumen_del_dia = ''
        self.estadisticas_globales = ''
示例#12
0
 def establecer_conecciones_terrestres(self):
     '''Crea un grafo de listas de adyacencia con las conexiones terrestres'''
     self.grafo_terrestre = Diccionario()
     for datos_fronteras_terrestres in importar_datos('borders.csv', ';'):
         if datos_fronteras_terrestres[0][:3] == '':
             datos_fronteras_terrestres[0] = datos_fronteras_terrestres[0][
                 3:]
         if datos_fronteras_terrestres[0] == 'Pais 1':
             pass
         else:
             if datos_fronteras_terrestres[0] in self.grafo_terrestre:
                 self.grafo_terrestre[datos_fronteras_terrestres[0]].append(
                     datos_fronteras_terrestres[1])
             else:
                 self.grafo_terrestre[
                     datos_fronteras_terrestres[0]] = ListaLigada(
                         datos_fronteras_terrestres[1])
示例#13
0
    '''
    Recibe una lista de listas de datos que se transforma en un string separado con comas y filas.
    Estas son guardadas en un archivo ".csv" con el nombre indicado.
    Se puede optar por sobreescribir un archivo o agregar los datos al final.
    '''
    if sobreescribir:
        modo = 'w'
    else:
        modo = 'a'

    with open(archivo_csv, modo) as archivo:
        for f in matriz:
            linea = join(', ', f)
            archivo.write(linea + '\n')


#-------------------------------------------------------------------------

if __name__ == '__main__':

    matriz = ListaLigada(ListaLigada(1, 2, 3, 4, 5, 6, 7, 8, 9),
                         ListaLigada('a', 'b', 'c', 'd', 'e', 'f'),
                         ListaLigada('g', 'h', 'i', 'j', 'k', 'l'),
                         ListaLigada('m', 'n', 'o', 'p', 'q', 'r'),
                         ListaLigada('s', 't', 'u', 'v', 'w', 'x'))
    exportar(matriz, 'prueba.csv', 1)
    '''
    lista = importar_datos('population.csv')
    print(lista)
    '''
示例#14
0
 def debe_ser_float(self, tipo):
     decimal = ListaLigada('float', 'decimal')
     if tipo in decimal:
         return True
     return False
示例#15
0
 def debe_ser_int(self, tipo):
     entero = ListaLigada('int', 'integer', 'entero', 'numero')
     if tipo in entero:
         return True
     return False
示例#16
0
 def debe_ser_str(self, tipo):
     texto = ListaLigada('str', 'string', 'texto')
     if tipo in texto:
         return True
     return False
示例#17
0
    texto = ''
    contador = 0
    maximo = 0
    for i in lista:
        if len(i) > maximo:
            maximo = len(i)
    espacio = max(espacio_por_elemento, maximo) + 1
    while contador < len(lista):
        for i in range(elementos_por_fila):
            if contador < len(lista):
                num = espacio - len(lista[contador])
                texto += (' ' * num + str(lista[contador] + ','))
                contador += 1
            else:
                return texto
        texto += '\n'


if __name__ == '__main__':

    def hola():
        print('hola')

    def chao():
        print('chao')

    lista1 = ListaLigada('Imprimir Hola', 'Imprimir Chao')
    lista2 = ListaLigada(hola, chao)

    m = Menu(lista1, lista2).menu()
示例#18
0
class Mundo:
    def __init__(self):
        self.propuestas = ListaLigada()
        self.grafo_terrestre = None
        self.grafo_aereo = None

        self.infectados_totales = 0
        self.muertos_totales = 0
        self.infectados_totales = 0

        # litas
        self.lista_paises = ListaLigada()
        self.paises_infectados = ListaLigada()
        self.paises_aeropuertos_cerrados = ListaLigada()
        self.paises_fronteras_cerradas = ListaLigada()
        self.paises_con_mascarillas = ListaLigada()
        self.paises_limpios = ListaLigada()
        self.paises_muertos = ListaLigada()

        # estadisticas
        self.resumen_del_dia = ''
        self.estadisticas_globales = ''

    def establecer_conecciones_terrestres(self):
        '''Crea un grafo de listas de adyacencia con las conexiones terrestres'''
        self.grafo_terrestre = Diccionario()
        for datos_fronteras_terrestres in importar_datos('borders.csv', ';'):
            if datos_fronteras_terrestres[0][:3] == '':
                datos_fronteras_terrestres[0] = datos_fronteras_terrestres[0][
                    3:]
            if datos_fronteras_terrestres[0] == 'Pais 1':
                pass
            else:
                if datos_fronteras_terrestres[0] in self.grafo_terrestre:
                    self.grafo_terrestre[datos_fronteras_terrestres[0]].append(
                        datos_fronteras_terrestres[1])
                else:
                    self.grafo_terrestre[
                        datos_fronteras_terrestres[0]] = ListaLigada(
                            datos_fronteras_terrestres[1])

    def establecer_conexiones_aereas(self):
        '''Crea un grafo de listas de adyacencia con las conexiones aereas'''
        self.grafo_aereo = Diccionario()
        for datos_fronteras_aereas in importar_datos('random_airports.csv'):
            if datos_fronteras_aereas[0][:3] == '':
                datos_fronteras_aereas[0] = datos_fronteras_aereas[0][3:]
            if datos_fronteras_aereas[0] == 'Pais 1':
                pass
            else:
                if datos_fronteras_aereas[0] in self.grafo_aereo:
                    self.grafo_aereo[datos_fronteras_aereas[0]].append(
                        datos_fronteras_aereas[1])
                else:
                    self.grafo_aereo[datos_fronteras_aereas[0]] = ListaLigada(
                        datos_fronteras_aereas[1])

    def ordenar_propuestas(self):
        self.propuestas.sort()

    def estad_resumen_diario(self):
        '''
        Actualiza los totales de gente infectada y gente muerta y las listas de paises en distintas situaciones.
        Crea un string con el resumen de estadisticas del dia anterior
        '''

        # Calcula el total de muertos y el total de infectados del mundo.
        # Se les restan los totales del dia anterior para obtener la cantidad
        # diaria.
        muertos_totales_anterior = self.muertos_totales
        infectados_totales_anterior = self.infectados_totales
        self.muertos_totales = 0
        self.infectados_totales = 0
        for pais in self.lista_paises:
            self.muertos_totales += pais.muertos
            self.infectados_totales += pais.infectados
        infectados_del_dia = self.infectados_totales - infectados_totales_anterior
        muertos_del_dia = self.muertos_totales - muertos_totales_anterior

        # Ojo tengo que asegurarme que la sobrecarga resta solo mantenga los elementos que  estan en la primera lista y no en la segunda, pero no al reves.
        # Esto para evitar que aparezcan en la lista los paises que recibieron
        # la cura.

        lista_tmp = ListaLigada(
            filter(lambda x: x.aeropuerto == False, self.lista_paises))
        aeropuertos_cerrados_dia = ', '.join(lista_tmp -
                                             self.paises_aeropuertos_cerrados)
        self.paises_aeropuertos_cerrados = lista_tmp

        lista_tmp = ListaLigada(filter(lambda x: x.frontera,
                                       self.lista_paises))
        fronteras_cerradas_dia = ', '.join(lista_tmp -
                                           self.paises_fronteras_cerradas)
        self.paises_fronteras_cerradas = lista_tmp

        lista_tmp = ListaLigada(
            filter(lambda x: x.infectado, self.lista_paises))
        paises_infectados_dia = ', '.join(lista_tmp - self.paises_infectados)
        self.paises_infectados = lista_tmp

        lista_tmp = ListaLigada(
            filter(lambda x: x.mascarillas, self.lista_paises))
        paises_mascarillas_dia = ', '.join(lista_tmp -
                                           self.paises_con_mascarillas)
        self.paises_con_mascarillas = lista_tmp

        del lista_tmp

        self.resumen_del_dia = ('El dia de ayer...\n'
                                'Se infectaron: {0} personas.\n'
                                'Murieron: {1} personas.\n'
                                'La infeccion llego a: {2}\n'
                                'Se cerraron lo aeropuertos de: {3}\n'
                                'Se cerraron las fronteras de: {4}\n'
                                'Se entregaron mascarillas en: {5}\n'.format(
                                    infectados_del_dia, muertos_del_dia,
                                    paises_infectados_dia,
                                    aeropuertos_cerrados_dia,
                                    fronteras_cerradas_dia,
                                    paises_mascarillas_dia))

    def mostrar_resumen_diario(self):
        print(self.resumen_del_dia)

    def mostrar_estad_por_pais(self):
        conteo = enumerate(self.lista_paises, 1)
        diccionario_paises = Diccionario()
        for i, j in conteo:
            print('{} ')
            diccionario_paises[i] = j
        entrada = SuperInput(
            '>>> Ingresa el numero del pais que quieres revisar: ', int)
        diccionario_paises[entrada].mostrar_estadisticas()

    def estad_global(self):

        self.paises_limpios = ListaLigada(
            filter(lambda x: x.infectado(), self.lista_paises))
        self.paises_muertos = ListaLigada(
            filter(lambda x: x.muerto(), self.lista_paises))

        poblacion_total = sum(map(lambda x: x.poblacion, self.lista_paises))
        muertos_totales = sum(map(lambda x: x.muertos, self.lista_paises))
        vivos_totales = poblacion_total - muertos_totales

        print('Paises limpios:            \n{0}\n'
              'Paises infectados:         \n{1}\n'
              'Paises muertos:            \n{2}\n'
              'Poblacion total viva       \n{3:11}'
              'Poblacion total infectada: \n{4:11}'
              'Poblacion total sana:      \n{5:11}'.format(
                  ', '.join(self.paises_limpios),
                  ', '.join(self.paises_infectados),
                  ', '.join(self.paises_muertos), vivos_totales,
                  self.infetados_totales, self.muertos_totales))

    def muertes_infecciones_dias(self, today):
        print('Muertes e Infecciones Por Dia:\n')
        for i in range(today):
            infecciones_dia = reduce(
                lambda x, y: x.bitacora[i][0] + y.bitacora[i][0],
                self.lista_paises)
            muertes_dia = reduce(
                lambda x, y: x.bitacora[i][1] + y.bitacora[i][1],
                self.lista_paises)
            print('Dia {}: {}infectados {}muertos'.filter(
                today, infecciones_dia, muertes_dia))
        print()

    def prom_muertes_infecciones(self, today):
        infecciones_dia = reduce(
            lambda x, y: x + y,
            map(lambda x: x.bitacora[today][0], self.lista_paises))
        muertes_dia = reduce(
            lambda x, y: x + y,
            map(lambda x: x.bitacora[today][1], self.lista_paises))