Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
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()
Exemplo n.º 5
0
    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()
Exemplo n.º 6
0
    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()