def remover_nodo(self): try: mensaje("remover_nodo") numero_tipo = entrada(">>> ") while numero_tipo.strip() not in Tupla("0", "1", "2", "3", "4"): mensaje("error") numero_tipo = entrada(">>> ") print("-" * 80) grupos = Tupla(self.generadoras, self.elevadoras, self.transmision, self.distribucion, self.casas) grupo = grupos[int(numero_tipo)] numero_nodo = input_lista( grupo.valores(), f">>> " f"{self.nombres[int(numero_tipo)]}: ") nodo_ = grupo.valores()[numero_nodo] borrado = grupo.pop(nodo_.id).valor print(f"Se quitó el nodo: {borrado}") except Volver: self.remover_nodo()
def modificar_aristas(self): try: mensaje("modificar_arista") ingreso = entrada(">>> ") while ingreso != "": try: descifrado = descifrar_input_conexion(ingreso) except ErrorEntrada as error: mensaje("error_entrada", error) else: try: desde = self.diccionario[descifrado[1][0]][ descifrado[1][1]] hasta = self.diccionario[descifrado[2][0]][ descifrado[2][1]] except InvalidQuery as error: mensaje("excepcion", Tupla("InvalidQuery", error)) raise Volver() else: if descifrado[0] == "+": print("A continuación puede ingresar la distancia " "que separa a estos nodos") distancia = entrada(">>> Distancia: ") while not distancia.replace('.', '', 1).isnumeric(): print( "Estamos teniendo problemas para leer el " "input") print("Por favor, inténtelo de nuevo :D") distancia = entrada(">>> Distancia: ") try: self.agregar_conexion(desde, hasta, distancia) except ForbiddenAction as error: print("Error:", error) print("Puede intentarlo nuevamente :D") elif descifrado[0] == "-": try: self.remover_conexion(desde, hasta) except ForbiddenAction as error: mensaje("excepcion", Tupla("ForbiddenAction", error)) finally: ingreso = entrada(">>> ") except Volver: self.modificar_aristas()
def consulta(self): try: opcion = mensaje("consultas") if int(opcion) == 0: mensaje("consumo_total") respuesta = input_lista(self.comunas, otro=True) if respuesta == "*": comuna = entrada(">>> Comuna: ").strip().upper() else: comuna = self.comunas[respuesta] consumo, porcentaje = self.consumo_total(comuna) print(f"La comuna {comuna} tiene un consumo de " f"{consumo} kW (un {round(porcentaje, 2)}% del " f"total)") elif int(opcion) in Tupla(1, 2): mensaje("mayor_menor_consumo") sigla = entrada(">>> Sigla: ") accion, id_, provincia, comuna = self.mayor_menor_consumo( sigla, opcion) print(f"Los datos de la casa con {accion} consumo son:") print(f"Casa: id = {id_}, Provincia = {provincia}, Comuna =" f" {comuna}") elif int(opcion) == 3: mensaje("perdida_potencia") id_ = entrada(">>> id: ") resultado = self.potencia_perdida(id_) print(f"La potencia de perdida en la transmisión es de " f"{resultado} kW.") elif int(opcion) == 4: tipo, id_ = mensaje("consumo_subestacion") respuesta = self.consumo_subestacion(id_, tipo) print(f"El consumo total de esta subestación es de " f"{respuesta} kW.") except InvalidQuery as error: mensaje("excepcion", Tupla("InvalidQuery", error)) self.consulta() except Volver: self.consulta()
tipo_datos = "small" ruta = f"bd/{tipo_datos}" ###################### if __name__ == '__main__': grafo = SistemaElectrico() grafo.cargar_datos(ruta) grafo.cargar_conexiones(ruta) grafo.calcular_demanda() grafo.simular_flujo() while True: try: mensaje("menu") opciones = Tupla("Generar Consulta", "Agregar Nodo", "Remover Nodo", "Añadir o Quitar Conexiones (Classic)", "Añadir o Quitar Conexiones (Modo Hackermen)") respuesta = int(input_lista(opciones, ">>> ")) if respuesta == 0: grafo.consulta() elif respuesta == 1: grafo.agregar_nodo() elif respuesta == 2: grafo.remover_nodo() elif respuesta == 3: grafo.modificar_aristas_clasico() elif respuesta == 4: grafo.modificar_aristas()
def agregar_nodo(self): try: mensaje("agregar_nodo") numero_tipo = entrada(">>> ") while numero_tipo.strip() not in Tupla("0", "1", "2", "3", "4"): mensaje("error") numero_tipo = entrada(">>> ") print("-" * 80) presentacion = "A continuación puede ingresar los datos de la {} " \ "nueva.\nEn algunos campos se tiene la " \ "posibilidad de presionar [ENTER] para " \ "ingresar un valor al azar." titulos = self.nombres grupos = Tupla(self.generadoras, self.elevadoras, self.transmision, self.distribucion, self.casas) grupo = grupos[int(numero_tipo)] tipo_estacion = "GETDC"[int(numero_tipo)] print(presentacion.format(f"{titulos[int(numero_tipo)]}")) # 0. ID print("-" * 80) id_ = entrada(">>> id: ") while grupo.existe(id_): if id_ == "": id_ = grupo.llave_random() else: print("Esta id ya existe, por favor elige otra :D") id_ = entrada(">>> id: ") if id_ == "": id_ = grupo.llave_random() print(f"id seleccionada: {id_}") print("-" * 80) if int(numero_tipo) != 4: # 1. Nombre nombre_ = entrada(">>> Nombre: ") print("-" * 80) print(f"nombre seleccionada: {nombre_}") # 2. Sistema numero_sistema = input_lista(self.sistemas.llaves(), ">>> Sistema Eléctrico: ") sistema_ = self.sistemas.llaves()[numero_sistema] print(f"sistema electrico seleccionada: {sistema_}") print("-" * 80) # 3. Provincia numero_provincia = input_lista(self.sistemas[sistema_], ">>> Provincia: ", True) if numero_provincia == "*": provincia_ = entrada(">>> Provincia (nombre): ").upper() else: provincia_ = self.sistemas[sistema_][numero_provincia] print(f"provincia seleccionada: {provincia_}") print("-" * 80) # 4. Comuna numero_comuna = input_lista(self.lugares[provincia_], ">>> Comuna: ", True) if numero_comuna == "*": comuna_ = entrada(">>> Comuna (nombre): ").upper() else: comuna_ = self.lugares[provincia_][numero_comuna] print(f"comuna seleccionada: {comuna_}") print("-" * 80) if int(numero_tipo) == 0: # 5. Tipo numero_tipo = input_lista(self.tipos_centrales, ">>> Tipo: ") tipo_ = self.tipos_centrales[numero_tipo] print(f"tipo seleccionado: {tipo_}") print("-" * 80) # 6. Potencia potencia_ = entrada(">>> Potencia (MW): ") while not potencia_.replace('.', '', 1).isnumeric(): print("No pudimos entender tu input :O " "inténtelo de nuevo por favor :D") potencia_ = entrada(">>> Potencia (MW): ") central_ = Generadora(Tupla(id_, nombre_, sistema_, provincia_, comuna_, tipo_, potencia_), inicio=False) self.generadoras[central_.id] = central_ self.lugares[provincia_].add(comuna_) self.comunas.add(comuna_) elif int(numero_tipo) in Tupla(1, 2, 3): # 6. Consumo consumo_ = entrada(">>> Consumo (MW): ") while not consumo_.replace('.', '', 1).isnumeric(): print("No pudimos entender tu input :O " "inténtelo de nuevo por favor :D") consumo_ = entrada(">>> Consumo (MW): ") estacion_ = Estacion(Tupla(id_, nombre_, sistema_, provincia_, comuna_, consumo_), inicio=False, tipo=tipo_estacion) grupo[estacion_.id] = estacion_ self.lugares[provincia_].add(comuna_) self.comunas.add(comuna_) elif int(numero_tipo) == 4: # 6. Consumo consumo_ = entrada(">>> Consumo (kW): ") while not consumo_.replace('.', '', 1).isnumeric(): print("No pudimos entender tu input :O " "inténtelo de nuevo por favor :D") consumo_ = entrada(">>> Consumo (kW): ") casa_ = Casa(Tupla(id_, sistema_, provincia_, comuna_, consumo_), inicio=False) self.casas[casa_.id] = casa_ self.lugares[provincia_].add(comuna_) self.comunas.add(comuna_) except Volver: self.agregar_nodo()
def modificar_aristas_clasico(self): try: mensaje("modificar_aristas_clasico") numero_tipo = entrada(">>> ") while numero_tipo.strip() not in Tupla("0", "1", "2", "3", "4"): mensaje("error") numero_tipo = entrada(">>> ") print("-" * 80) grupos = Tupla(self.generadoras, self.elevadoras, self.transmision, self.distribucion, self.casas, self.casas) grupo = grupos[int(numero_tipo)] numero_nodo = input_lista( grupo.valores(), f">>> " f"{self.nombres[int(numero_tipo)]}: ") nodo_ = grupo.valores()[numero_nodo] print("-" * 80) print("¿Qué acción desea realizar?") numero_accion = int( input_lista(Tupla("Añadir Conexión", "Quitar " "Conexión"), ">>> ")) if int(numero_tipo) == 0: numero_respuesta = 0 else: numero_respuesta = int( input_lista( Tupla("Este nodo es quien " "inicia la conexión", "Este nodo es el receptor"), ">>> ")) print("-" * 80) print("Ahora puede elegir el otro nodo :D") if numero_accion == 0: if numero_respuesta == 0: numero_child = input_lista( grupos[int(numero_tipo) + 1].valores(), ">>> ") desde = nodo_ hasta = desde.children.descomprimir(0)[numero_child] elif numero_respuesta == 1: numero_parent = input_lista( grupos[int(numero_tipo) - 1].valores(), ">>> ") hasta = nodo_ desde = hasta.parent.descomprimir(0)[numero_parent] print("Ahora, puedes ingresar la distancia que hay entre los " "nodos :D") distancia = entrada(">>> Distancia: ") while not distancia.replace('.', '', 1).isnumeric(): print("Estamos teniendo problemas para leer el " "input") print("Por favor, inténtelo de nuevo :D") distancia = entrada(">>> Distancia: ") try: self.agregar_conexion(desde, hasta, distancia) except ForbiddenAction as error: mensaje("excepcion", Tupla("ForbiddenAction", error)) raise Volver() elif numero_accion == 1: if numero_respuesta == 0: numero_child = input_lista(nodo_.children.descomprimir(0), ">>> ") desde = nodo_ hasta = desde.children.descomprimir(0)[numero_child] elif numero_respuesta == 1: numero_parent = input_lista(nodo_.parent.descomprimir(0), ">>> ") hasta = nodo_ desde = hasta.parent.descomprimir(0)[numero_parent] try: self.remover_conexion(desde, hasta, confirmado=True) except ForbiddenAction as error: mensaje("excepcion", Tupla("ForbbidenAction", error)) raise Volver() except Volver: self.modificar_aristas_clasico()