Example #1
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()
Example #2
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()
Example #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()
Example #4
0
def mensaje(tipo="-", opcional=""):
    grupos = Tupla("Central Generadora", "Estación de Elevación",
                   "Subestación de Transmisión", "Subestación de "
                                                 "Distribución", "Casa")

    if tipo == "modificar_arista":
        print("_" * 80)
        print("AGREGAR O ELIMINAR CONEXIÓN")
        print("-" * 80)
        print("A continuación, puede ingresar lo conexión a agregar/eliminar")
        print("La forma para ingresarlo es:")
        print("Xi * Yj")
        print("Donde:\n"
              "* <X> corresponde al tipo de conexión del nodo de donde "
              "comienza la conexión")
        print("* <Y> es el tipo de conexión del nodo de destino")
        print("* <i> es la id del nodo X")
        print("* <j> es la id del nodo Y")
        print("* <*> corresponde a la acción a realizar")
        print("-" * 80)
        print("Tipos de conexión y acciones:")
        print("G: Central Generadora, E: Estación de Elevación")
        print("T: Subestación de Transmisión, D: Subestación de Distribución")
        print("C: Casas, +: Agragar Conexión, -: Quitar Conexión")
        print("-" * 80)
        print("Ejemplos:")
        print("G0 - E2 ---> Quita conexión entre la Central(0) y la "
              "EstaciónElevadora(2)")
        print("T2 + D3 ---> Agrega una conexión entre el Transmisor(2) y la "
              "Distribuidora(3)")
        print("-" * 80)

    elif tipo == "modificar_aristas_clasico":
        print("_" * 80)
        print("AGREGAR O ELIMINAR CONEXIÓN (CLÁSICO)")
        print("-" * 80)
        mensaje("listado")
        print("-" * 80)
        print("A continuación puede ingresar el [número] correspondiente al "
              "tipo de nodo :D")

    elif tipo == "consultas":
        print("_" * 80)
        print("CONSULTAS")
        print("-" * 80)
        print("A continuación puede ingresar el [número] de la consulta :D")
        return input_lista(Tupla("Energía total consumida en una comuna",
                              "Cliente "
                        "con mayor consumo energético", "Cliente con menor "
                        "consumo energético", "Potencia perdida en "
                        "transmisión", "Consumo de una subestación"), ">>> ")

    elif tipo == "consumo_total":
        print("-" * 80)
        print("Ahora puede ingresar el [numero] de la comuna :D")

    elif tipo == "mayor_menor_consumo":
        print("-" * 80)
        print("Ahora puede ingresar la sigla del sistema eléctrico a "
              "consultar :D")

    elif tipo == "perdida_potencia":
        print("-" * 80)
        print("Ahora puede ingresar la id de la casa a consultar :D")

    elif tipo == "consumo_subestacion":
        print("-" * 80)
        print("¿Qué tipo de subestación desea consultar?")
        num = input_lista(Tupla("Subestación de Transmisión", "Subestación de "
                                                        "Distribución"))
        if int(num) == 0:
            nodo = "T"
        elif int(num) == 1:
            nodo = "D"
        print("Ahora puede ingresar la id de la subestación a consultar :D")
        id_ = entrada(">>> id:")
        return Tupla(nodo, id_)

    elif tipo == "error_entrada":
        print("(Error) ErrorEntrada", opcional)
        print("Lo sentimos :O Estamos teniendo problemas para "
              "entender lo ingresado")
        print("Por favor, inténtelo de nuevo :D")

    elif tipo in Tupla("agregar_nodo", "remover_nodo"):
        print("_" * 80)
        if tipo == "agregar_nodo":
            print("AGREGAR NODO")
        elif tipo == "remover_nodo":
            print("REMOVER NODO")
        print("-" * 80)
        mensaje("listado")
        print("-" * 80)
        print("A continuación puede ingresar el [número] correspondiente al "
              "tipo de nodo :D")

    elif tipo == "error":
        print("Estamos teniendo problemas para entender el input")
        print("Por favor, inténtelo de nuevo :D")

    elif tipo == "excepcion":
        print(f"(Error) {opcional[0]}: {opcional[1]}")
        print("¡Lo sentimos! Puedes intentarlo de nuevo :D ")

    elif tipo == "listado":
        for n in range_(len(grupos)):
            print(f"[{n}] {grupos[n]}")

    elif tipo == "menu":
        print("_" * 80)
        print("Bienvenid@ a Electromatic :D")
        print("_" * 80)
        print("A continuación se muestran las opciones disponibles:")
Example #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()
Example #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()