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 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
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()
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()
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()
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 = ''
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 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)
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)
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 __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])
''' 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) '''
def debe_ser_float(self, tipo): decimal = ListaLigada('float', 'decimal') if tipo in decimal: return True return False
def debe_ser_int(self, tipo): entero = ListaLigada('int', 'integer', 'entero', 'numero') if tipo in entero: return True return False
def debe_ser_str(self, tipo): texto = ListaLigada('str', 'string', 'texto') if tipo in texto: return True return False
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()
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))