def crear_pila_con_datos():
    obj = Pila(1)

    for i in range(5):
        obj.push(i)

    return obj
Exemplo n.º 2
0
 def __init__(self,archivo):
     '''Toma como parametro un archivo y crea la instancia inicial de la clase 
     Editor con sus respectivos atributos''''
     self.archivo=archivo
     self.t_act=self.archivo.tiempos.prim
     self.pos_t=0
     self.pila=Pila()
class _IteradorListaEnlazada():
    """Itera una instancia de la clase ListaEnlazada"""
    def __init__(self, prim):
        self.actual = prim
        self.pila_auxiliar = Pila()
        self.posicion = 0

    def next(self):
        """Avanza una posicion y devuelve el dato. Si no hay posicion siguiente lanza una excepcion StopIteration. Si no hay elemento lanza una excepcion AttributeError."""
        if not self.actual.prox:
            raise StopIteration('No hay más elementos en la lista')
        nodo = self.actual
        self.pila_auxiliar.apilar(nodo)
        self.actual = self.actual.prox
        self.posicion += 1
        return self.actual.dato

    def prev(self):
        """Retrocede una posicion y devuelve el dato. Si no hay posicion anterior lanza una excepcion StopIteration. Si no hay elemento lanza una excepcion AttributeError."""
        if self.pila_auxiliar.esta_vacia():
            raise StopIteration('No hay elemento previo')
        nodo = self.pila_auxiliar.desapilar()
        self.actual = nodo
        self.posicion -= 1
        return self.actual.dato
Exemplo n.º 4
0
 def test_case2(self):
     """ Testea que el metodo cantidad de la pila devuelva una cantidad correcta si se agrega
     un elemento solo en la inicializacion de la pila """
     p = Pila(["elemento"])
     # no se qué es más correcto: si usar assertEqual o usar assertTrue.
     # asumo que el True es que apunten al mismo elemento, mientras que el Equal compara valores.
     # en este caso, como son enteros, apuntarían al mismo "1"
     self.assertTrue(p.cantidad() == 1)
Exemplo n.º 5
0
 def test_case3(self):
     """ Testea que el método __str__ devuelva un string con la pila en orden desde el tope
     hacia el fondo correctamente"""
     p = Pila("caracteres")
     cadena = p.__str__()
     comparar = "Los elementos de la pila (de tope a fondo) son:\n s e r e t c a r a c"
     self.assertEqual(cadena, comparar)
     comparar2 = "Los elementos de la pila (de tope a fondo) son:\n s e r e t c a r a"
     self.assertNotEquals(cadena, comparar2)
Exemplo n.º 6
0
def ejemplo1():
    pila = Pila()

    pila.push(2)
    pila.push(3)
    pila.push(4)
    pila.push(5)
    pila.muestra()
    print ()
    print (pila.top())
    print (pila.top())
    print (pila.pop())
    print (pila.pop())
Exemplo n.º 7
0
def calculadora_polaca(elementos):
    """ Dada una lista de elementos que representan las componentes de
        una expresión en notacion polaca inversa, evalúa dicha expresión.
        Si la expresion está mal formada, levanta ValueError. """

    p = Pila()
    for elemento in elementos:
        print "DEBUG:", elemento
        # Intenta convertirlo a número
        try:
            numero = float(elemento)
            p.apilar(numero)
            print "DEBUG: apila ", numero
        # Si no se puede convertir a número, debería ser un operando
        except ValueError:
            # Si no es un operando válido, levanta ValueError
            if elemento not in "+-*/ %" or len(elemento) != 1:
                raise ValueError("Operando inválido")
            # Si es un operando válido, intenta desapilar y operar
            try:
                a1 = p.desapilar()
                print "DEBUG: desapila ", a1
                a2 = p.desapilar()
                print "DEBUG: desapila ", a2
            # Si hubo problemas al desapilar
            except ValueError:
                print "DEBUG: error pila faltan operandos"
                raise ValueError("Faltan operandos")

            if elemento == "+":
                resultado = a2 + a1
            elif elemento == "-":
                resultado = a2 - a1
            elif elemento == "*":
                resultado = a2 * a1
            elif elemento == "/":
                resultado = a2 / a1
            elif elemento == " %":
                resultado = a2 % a1
            print "DEBUG: apila ", resultado
            p.apilar(resultado)
        # Al final, el resultado debe ser lo único en la Pila
        res = p.desapilar()
        if p.esPilaVacia():
            return res
        else:
            print "DEBUG: error pila sobran operandos"
            raise ValueError("Sobran operandos")
Exemplo n.º 8
0
 def test_case1(self):
     """ Testea que el metodo cantidad de la pila devuelva la cantidad correcta de elementos
     aunque sean de distinto tipo, creando una pila vacia al comienzo """
     p = Pila()
     p.apilar("uno")
     p.apilar(2)
     self.assertEqual(p.cantidad(), 2)
Exemplo n.º 9
0
def evaluar(resultado):
    pilaOperadores = Pila()
    listaSufija = []
    resultado = list(resultado.upper())
    print(resultado)

    for simbolo in resultado:
        if simbolo in "0123456789":
            pilaOperadores.apilar(simbolo)
        else:
            if simbolo in "+-*/":
                simboloTope2 = pilaOperadores.desapilar()
                simboloTope = pilaOperadores.desapilar()

                res = calcularO(simboloTope, simbolo, simboloTope2)
                pilaOperadores.apilar(res)
    while not pilaOperadores.estaVacia():
        listaSufija.append(pilaOperadores.desapilar())
    return " ".join(listaSufija)
Exemplo n.º 10
0
class _IteradorListaEnlazada:
    """Clase que itera sobre la lista enlazada. Contiene los metodos next,
    prev, insertar_marca_despues e insertar_marca_antes."""
    def __init__(self, prim):
        self.actual = prim
        self.pila = Pila()

    def __next__(self):
        if self.actual is None:
            raise StopIteration()
        dato = self.actual.dato
        self.actual = self.actual.prox
        return dato

    def next(self):
        """El metodo devuleve el dato sobre el cual se encuenta y actualiza su
        posicion al siguiente nodo."""
        if self.actual is None:
            raise StopIteration()
        dato = self.actual.dato
        self.pila.apilar(self.actual)
        self.actual = self.actual.prox
        return dato

    def prev(self):
        if self.pila.esta_vacia():
            raise ValueError
        self.actual = self.pila.desapilar()
        return self.pila.ver_tope().dato

    def insertar_elem_despues(self, elem):
        """Dado un elemento 'elem' pasado por parametro, el metodo crea un nodo
        conteniendolo y lo inserta en la posicion actual del iterador."""
        nodo = _Nodo(elem)
        nodo.prox = self.actual
        self.actual = nodo
        self.pila.ver_tope().prox = self.actual

    def insertar_elem_antes(self, elem):
        """Dado un elemento 'elem' pasado por parametro, el metodo crea un nodo
        conteniendolo y lo inserta justo antes de la posicion actual del iterador"""
        dato = self.pila.desapilar()
        nodo = _Nodo(elem)
        nodo.prox = dato
        self.pila.apilar(nodo)
        self.pila.apilar(dato)
Exemplo n.º 11
0
    def conseguir_ruta_iterativa(self, estado):
        #Condiciones iniciales
        estado_actual = estado
        pila = Pila()
        visitados = []

        #Busqueda por profundidad (DFS)
        while (self.es_solucion(estado_actual)):
            visitados.append(estado_actual.conseguir_tablero())
            hijos = self.crear_hijos(estado_actual)
            if len(hijos) != 0:
                for x in hijos:
                    if x.conseguir_tablero() not in visitados:
                        x.establecer_ruta_nodo(
                            estado_actual.conseguir_ruta_nodo(),
                            estado_actual.conseguir_tablero())
                        pila.push(x)

            estado_actual = pila.pop()
        estado_actual.establecer_ruta_nodo(estado_actual.conseguir_ruta_nodo(),
                                           estado_actual.conseguir_tablero())
        return estado_actual
Exemplo n.º 12
0
 def test_case4(self):
     """ Testea que se agreguen correctamente los elementos a una pila """
     p = Pila([1, "dos", {"tres": 3}, [4, "cuatro"], (5, "cinco")])
     # el assertEqual espera un elemento de ti
     self.assertEqual(p.valores,
                      [1, "dos", {
                          "tres": 3
                      }, [4, "cuatro"], (5, "cinco")])
     # no sé cuál de las dos opciones es más pythonic
     self.assertListEqual(
         p.valores, [1, "dos", {
             "tres": 3
         }, [4, "cuatro"], (5, "cinco")])
Exemplo n.º 13
0
def _backtrack(grilla, visitados, acciones_posibles, movimientos):
    visitados[h(grilla)] = True
    if soko.juego_ganado(grilla):
        return True, movimientos
    for accion in acciones_posibles:
        nuevo_estado = soko.mover(grilla, accion)
        if h(nuevo_estado) in visitados:
            continue
        solucion_encontrada, movimientos = _backtrack(nuevo_estado, visitados,
                                                      acciones_posibles,
                                                      movimientos)
        if solucion_encontrada:
            movimientos.apilar(accion)
            return True, movimientos
    return False, Pila()
Exemplo n.º 14
0
def ingresarArbol():
    while True:
        opcion = \
            raw_input('Desea ingresar una expresion matematica en posfijo: (Y/N)'
                      )
        if opcion == 'Y':
            cadena = leerCadena()
            print 'cadena' , cadena 
            pila = Pila()
            nodo = crearArbol(cadena, pila)
            print 'Resultado operacion: ', evaluar(nodo)
        if opcion == 'N':
            break
    imprimirDatos()
    return None
Exemplo n.º 15
0
def construirArbol(expresionPostFija):

    pila = Pila()

    contador = 1

    for elemento in expresionPostFija:

        if elemento in simbolos:

            numeroDeOperandos = 1 if elemento in operadoresunarios else 2

            aux = numeroDeOperandos

            listaDeOperandos = []

            while aux != 0:

                operando = pila.extraer()

                listaDeOperandos.append(operando)

                aux -= 1

            resultado = construirSubArbol(listaDeOperandos, elemento)

            pila.incluir(resultado)

        else:

            if elemento == 'e':

                nuevoElemento = [[elemento, True, [], []], [], []]

            else:

                nuevoElemento = [[elemento, False, [contador], [contador]], [],
                                 []]

            pila.incluir(nuevoElemento)
            contador += 1

    return pila.extraer()
Exemplo n.º 16
0
def evaluarExpresion(expresionPostFijaList):

    pila = Pila()
    listaFinal = []
    contador = 1

    for caracter in expresionPostFijaList:

        if caracter in simbolos:

            listaDeOperandos = obtenerListaDeOperandos(pila, caracter)
            inicialA, finalA, inicialB, finalB = _obtenerEstadoInicialYFinal(
                listaDeOperandos)

            if len(listaDeOperandos) > 1:

                if caracter == "|":
                    resultado = unirListas(
                        listaDeOperandos,
                        obtenerInstruccionesDeOperadoresNoUnitarios(
                            caracter, contador, [inicialA, inicialB],
                            [finalA, finalB], listaDeOperandos))
                    contador += 2
                else:
                    resultado = obtenerInstruccionesDeOperadoresNoUnitarios(
                        caracter, contador, [inicialA, inicialB],
                        [finalA, finalB], listaDeOperandos)
                    #contador-=1
            else:

                resultado = obtenerInstruccionesDeOperadoresUnitarios(
                    listaDeOperandos, contador, [inicialA], [finalA], caracter)
                contador += 2

            pila.incluir(resultado)

        else:
            tuplaTemporal = [(str(contador), str((contador + 1)), caracter)]
            contador += 2
            pila.incluir(tuplaTemporal)

    listaFinal = pila.extraer()

    return [listaFinal]
Exemplo n.º 17
0
class postfija:

    arbolbase = Pila()
    entrada = input()
    lista = entrada.split(" ")
    #print(lista)
    for element in lista:
        if (element == '+' or element == '-' or element == '*'
                or element == '/'):
            puntder = float(arbolbase.desapilar())
            puntizq = float(arbolbase.desapilar())
            if element == '+':
                arbolbase.apilar(puntizq + puntder)
            if element == '-':
                arbolbase.apilar(puntizq - puntder)
            if element == '*':
                arbolbase.apilar(puntizq * puntder)
            if element == '/':
                arbolbase.apilar(puntizq / puntder)
        else:
            #print (element)
            arbolbase.apilar(element)

    print(arbolbase.desapilar())
Exemplo n.º 18
0
        return str(n) + "\n\nCuenta regresiva terminada"
    else:
        return str(n) + "\n" + cuenta_regresiva(n - 1)


def main2():
    print(cuenta_regresiva(10))


main2()

print("------------------------------------------------")
print("Ejercicio 3: Sacar valor medio de una pila\n")

pops = []
p = Pila()


def mitad_pila(n, mitad):
    if n == mitad + 1:
        return "'" + str(p.pop()) + "' Es el valor medio de la pila"
    else:
        pops.append(p.pop())
        return mitad_pila(n - 1, mitad)


def main3():
    print("Pila inicial")
    for num in range(1, 12):
        p.push(num)
    p.to_string()
Exemplo n.º 19
0
def ejercicio1():
    tablaLR =  {(0,Lexico._tiposInt['IDENTIFICADOR']): 2,
                (0,3): 1,
                (1,Lexico._tiposInt['$']): -1,
                (2,Lexico._tiposInt['OPSUMA']): 3,
                (3,Lexico._tiposInt['IDENTIFICADOR']): 4,
                (4,Lexico._tiposInt['$']): -2}
    
    #Preparar la pila
    pila = Pila()
    fila = 0
    columna = 0
    accion = 0
    aceptacion = 0
    
    #Establecer la cadena de entrada
    lexico = Lexico("a+b")

    #Adecuar la pila
    pila.push(Lexico._tiposInt['$'])
    pila.push(0);
    #solicitar el simbolo al Lexico "a"
    lexico.sigSimbolo()
    #verificar si el simbolo en pila.top() tiene un desplazamiento o transicion con
    #respecto a lexico.tipo conforme a la tablaLR
    fila = pila.top()
    columna = lexico.tipo
    accion = tablaLR.get((fila,columna), 0)
    #sabemos que la accion va a ser d2, o sea accion = 2, numero positivo,
    #indica transicion o desplazamiento, entonces apilamos estos valores.
    pila.push(lexico.tipo)
    pila.push(accion)
    
    #Mostrar el progreso del algoritmo
    print()
    pila.muestra()
    print()
    
    
    #pedimos el siguiente simbolo "+"
    lexico.sigSimbolo()
    #verificar accion
    fila = pila.top()
    columna = lexico.tipo
    accion = tablaLR.get((fila,columna), 0)
    #sabemos que nos dara el desplazamiento 3; accion = 3, entonces apilamos
    pila.push(lexico.tipo)
    pila.push(accion)
    
    print()
    pila.muestra()
    print()
    
    #pedimos el siguiente simbolo "b"
    lexico.sigSimbolo()
    #verificar accion
    fila = pila.top()
    columna = lexico.tipo
    accion = tablaLR.get((fila,columna), 0)
    #sabemos que nos dara el desplazamiento 4; accion = 4, entonces apilamos
    pila.push(lexico.tipo)
    pila.push(accion)
    
    print()
    pila.muestra()
    print()
    
    #pedimos el siguiente simbolo "$" (llegamos al final de la entrada)
    lexico.sigSimbolo()
    #verificar accion
    fila = pila.top()
    columna = lexico.tipo
    accion = tablaLR.get((fila,columna), 0)
    #sabemos que nos dara la transicion -2; accion = -2, entonces -desapilamos-
    #Desapilaremos el doble del tamaño de la regla, la regla es E-> <id>+<id>
    #la longitud seria 3, nosotros desapilaremos 6 elementos.
    pila.pop()
    pila.pop()
    pila.pop()
    pila.pop()
    pila.pop()
    pila.pop()
    
    print()
    pila.muestra()
    print()
    
    #continuamos sin pedir el siguiente simbolo, debido a que la ultima accion fue
    #una reduccion, verificamos que accion sigue
    fila = pila.top() #seria 0
    columna = 3 #nos quedamos en la columna 3, donde esta la regla en la matriz
    accion = tablaLR.get((fila,columna), 0)
    
    print()
    pila.muestra()
    print()
    
    #la accion resulta ser una transicion, entonces apilamos
    pila.push(3)#la representacion de la regla E en la matriz
    pila.push(accion)
    
    print()
    pila.muestra()
    print()
        
    #Como lo anterior fue una transicion, continuamos sin solicitar nuevo simbolo
    fila = pila.top()
    print("fila:",fila)
    columna = lexico.tipo
    print("columna:",columna)
    accion = tablaLR.get((fila,columna),0)
    print("accion: ",accion)
    print()
    pila.muestra()
    print()
    
    #la accion resulta ser -1, es decir, aceptacion.abs
    aceptacion = accion == -1
    
    if aceptacion:
        print("Aceptado")
Exemplo n.º 20
0
class Editor:
    def __init__(self,archivo):
        self.archivo=archivo
        self.t_act=self.archivo.tiempos.prim
        self.pos_t=0
        self.pila=Pila()

    def representar_cancion(self):
        print('↓ Nro de track',end='\t\t\t\t\t')
        print('Tiempos (en segundos)')
        print(end='  ')
        for t in self.archivo.tiempos:
            posicion=self.archivo.tiempos.index(t)
            if self.pos_t==posicion:
                print('>'+str(t.obtener_tiempo())+'<', end=' ')
            else:
                print(t.obtener_tiempo(), end='  ')
        print()
        for x in range(len(t.obtener_nota())):
            print(x, end='  ')
            for t in self.archivo.tiempos:

                lista_notas=t.obtener_nota()
                nota=lista_notas[x]
                if nota: #La idea es que el usuario vea que notas estan activas
                    print('[X]', end='  ')
                else:
                    print('[ ]', end='  ')
            print()
#--------------------------------------------------------------------#
    def guardar(self,archivo):
        with open(archivo,'w') as plp:
            """Quedo medio raro, mas que nada la parte de los tiempos
            pero me parece que funciona"""
            plp.write('FIELD,DATA\n')
            plp.write('C,{}\n'.format(self.archivo.canales))
            for s in self.archivo.sonidos:
                tipo=s[0]
                frecuencia=[1]
                volumen=[2]
                plp.write('S,{}|{}|{}\n'.format(tipo,frecuencia,volumen))
            tiempo=0
            for t in self.archivo.tiempos:
                tiempo_nuevo=t.obtener_tiempo()
                if tiempo!=tiempo_nuevo:
                    plp.write('T,{}\n'.format(tiempo_nuevo))
                cadena=''
                for elem in t.obtener_nota():
                    if elem:
                        cadena+='#'
                    else:
                        cadena+='·'
                plp.write('N,{}\n'.format(cadena))
                tiempo=tiempo_nuevo
        print('El archivo se ha guardado con el nombre ',archivo)
#--------------------------------------------------------------------#
    def avanzar(self,x=1):
        for iteracion in range(int(x)):
            if self.t_act.prox is None:
                raise IndexError('Fuera de rango')
            dato=self.t_act
            self.t_act=self.t_act.prox
            self.pila.apilar(dato)
            self.pos_t+=1
            print(self.t_act)
#--------------------------------------------------------------------#
    def retroceder(self,x=1):
        for iteracion in range(int(x)):
            if self.t_act is None:
                raise IndexError('Fuera de rango')
            dato=self.t_act
            self.t_act=self.pila.desapilar()
            self.t_act.prox=dato
            self.pos_t-=1
#--------------------------------------------------------------------#
    def reproducir(self):
        self.archivo.reproducir()

    def reproducir_tiempos(self,cant_tiempos,segundos=False):
        if not cant_tiempos:
            cant_tiempos=20
            return
        lista_tiempos=[]
        tiempo=self.t_act
        for x in range(cant_tiempos):
            if tiempo is None:
                break
            lista_tiempos.append(tiempo.dato)
            tiempo=tiempo.prox
        self.archivo.reproducir_tiempos(lista_tiempos,segundos)
#--------------------------------------------------------------------#
    def agregar_nota(self,tipo,frequency,volume):
        sonido_nuevo=self.archivo.convertir_objeto([tipo,frequency,volume])
        print(sonido_nuevo)
        print(self.archivo.objeto_sonidos)
        for t in self.archivo.tiempos:
            if t is self.t_act.dato:
                t.agregar_nota(True)
                print(sonido_nuevo)
                t.agregar_nota_obj(sonido_nuevo)
                continue
            t.agregar_nota(False)
        self.archivo.objeto_sonidos.append(sonido_nuevo)
#--------------------------------------------------------------------#
    def quitar_nota(self,pos):
        contador=0
        print(self.archivo.objeto_sonidos)
        nota=self.archivo.objeto_sonidos.pop(pos)
        for t in self.archivo.tiempos:
            t.notas.pop(pos)
            if nota in t.obtener_nota_obj():
                t.notas_obj.remove(nota)
    def activar_nota(self,pos):
        dato=self.t_act.dato.index_notas(pos)
        if dato:
            raise ValueError('El track elegido ya esta activado')
        self.t_act.dato.quitar_nota(pos)
        self.t_act.dato.agregar_nota(True,pos)
        nota=self.archivo.objeto_sonidos.devolver_posicion(pos)
        self.t_act.dato.agregar_nota_obj(nota)
    def desactivar_nota(self,pos):
        dato=self.t_act.dato.index_notas(pos)
        if not dato:
            raise ValueError('El track elegido ya esta desactivado')
        self.t_act.dato.quitar_nota(pos)
        self.t_act.dato.agregar_nota(False,pos)
        nota=self.archivo.objeto_sonidos.devolver_posicion(pos)
        self.t_act.dato.notas_obj.remove(nota)

    def anadir_marca(self,duracion):
        tiempo=Tiempo(duracion)
        for iteracion in range(len(self.archivo.objeto_sonidos)):
            tiempo.agregar_nota(False)
        self.archivo.tiempos.append(tiempo)

    def anadir_marca_next(self,duracion):
        tiempo=Tiempo(duracion)
        for iteracion in range(len(self.archivo.objeto_sonidos)):
            tiempo.agregar_nota(False)
        posicion=self.archivo.tiempos.index(self.t_act.dato)+1
        self.archivo.tiempos.insert(posicion,tiempo)

    def anadir_marca_prev(self,duracion):
        tiempo=Tiempo(duracion)
        for iteracion in range(len(self.archivo.objeto_sonidos)):
            tiempo.agregar_nota(False)
        posicion=self.archivo.tiempos.index(self.t_act.dato)-1
        self.archivo.tiempos.insert(posicion,tiempo)
        nodo=self.archivo.tiempos.obtener_nodo(posicion)
        self.pila.apilar(nodo)
Exemplo n.º 21
0
'''
Pila

Una pila es una lista ordenada o estructura de datos en la que el modo de acceso a sus elementos es de tipo 'LIFO' (Last in First Out, Ultimo en Entrar es el Primero en Salir) que permite almacenar datos.

Para el manejo de los datos se cuenta con dos operaciones basicas: apilar(push), que coloca un objeto en la pila, y su opeacion inversa, retirar(o desapilar, pop), que retira el ultimo elemento apilado.

OPERACIONES:
Crear: Se crea una pila vacia (constructor)
Tamaño: Regresa el numero de elementos de la pila (size)
Apilar: Se añade un elemento a la pila (push)
Desapilar: Se elimina el elemento frontal de la pila (pop)
Cima: Devuelve el elemento que esta en la cima de la pila (top o peek)
Vacia: Devuelve True si la pila esta sin elementos o False en caso de que contenga alguno (empty)

Las pilas pueden ser de tamaño estatico y dinamico, se pueden implementar en listas, arreglos, colecciones de datos o el listas enlazadas
'''

from Pila import Pila

pila = Pila(5)

pila.push(25)
pila.push(12)
pila.push(57)

pila.show()
print(pila.top())
Exemplo n.º 22
0
#  Copyright 2016 Yorlys Oropeza <yorlys@debian>
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.
#
#

from Pila import Pila

pila = Pila(5)

pila.push(23)
pila.push(90)
pila.push(45)

pila.show()
pila.pop()
pila.show()
Exemplo n.º 23
0
_autor_ = 'Enrique Bello'
from Pila import Pila

pila = Pila(6)

pila.push(20)
pila.push(49)
pila.push(110)
pila.push(159)
pila.push(196)
pila.push(200)
pila.push(284)

#pila.pop()

pila.show()

print("Size: %d" % (pila.Size()))
print("Estado:", pila.empty())
print("Top: %d" % (pila.Top()))
Exemplo n.º 24
0
    #listaCaracteres = []
    listaCaracteres = cadena.split(' ')
    return listaCaracteres


def crearArbol(lista, pila):
    for i in range(0, len(lista)):
        if lista[i] in "+-*/":
            der = pila.sacarElemento()
            izq = pila.sacarElemento()
            nodoAux = Nodo(lista[i], izq, der)
            pila.agregarElemento(nodoAux)
        else:
            pila.agregarElemento(Nodo(int(lista[i]), None, None))
    return pila.sacarElemento()


def imprimirArbolPostfijo(arbol):
    if arbol != None:
        imprimirArbolPostfijo(arbol.izq)
        imprimirArbolPostfijo(arbol.der)
        print arbol.valor


cadena = leerCadena()
pila = Pila()
nodo = crearArbol(cadena, pila)
print "impresion de Arbol:"
imprimirArbolPostfijo(nodo)
print "Resultado operacion: ", evaluar(nodo)
Exemplo n.º 25
0
 def __init__(self,archivo):
     self.archivo=archivo
     self.t_act=self.archivo.tiempos.prim
     self.pos_t=0
     self.pila=Pila()
 def __init__(self, prim):
     self.actual = prim
     self.pila_auxiliar = Pila()
     self.posicion = 0
Exemplo n.º 27
0
    def Simulador_Automata_lento(self):
        self.label.clear()
        self.Palabra.setEnabled(False)
        self.Verifica_rapido.setEnabled(False)
        self.Verifica_Lento.setEnabled(False)
        self.imagen_robot.setPixmap(QtGui.QPixmap("automata_imagen.png"))
        palabra=self.Palabra.text()+"#"
        Pila_Valida=Pila()
        Pila_Valida.apilar("#")
        engine = pyttsx3.init()
        rate = engine.getProperty('rate')
        engine.setProperty('rate', rate-60)
        estado_actual="q0"
        bandera=1
        self.label.setStyleSheet("font: 75 20pt \"MS Shell Dlg 2\";""color: green")
        
        mostrando_cadena_recorrida=""
        for caracter in palabra:
            #(a/#/#a)
            if Pila_Valida.tope()=="#" and caracter=="a" and estado_actual=="q0":
                mostrando_cadena_recorrida="a"
                self.Tr10.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("#")
                Pila_Valida.apilar("a")
                engine.say("Estado inicial q0. leyendo una a")
                engine.runAndWait()
                QtTest.QTest.qWait(1000) 
                self.Tr10.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
                  
                
            #(a/a/aa)   
            elif Pila_Valida.tope()=="a" and caracter=="a" and estado_actual=="q0":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"a"
                QtTest.QTest.qWait(1000)
                self.Tr6.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("a")
                Pila_Valida.apilar("a")
                engine.say("continúa en Estado inicial q0. leyendo una a")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.label.setText(caracter+caracter)
                self.Tr6.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
                    
                
            #(b/a/ab)
            elif Pila_Valida.tope()=="a" and caracter=="b" and estado_actual=="q0":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"b"
                self.Tr8.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("a")
                Pila_Valida.apilar("b")
                engine.say("continúa en Estado inicial q0. leyendo una b")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.Tr8.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            #(c/b/b)
            elif Pila_Valida.tope()=="b" and caracter=="c" and estado_actual=="q0":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"c"
                self.Tr11.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("b")
                engine.say("pasa al estado q1. leyendo una c")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.Tr11.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem("b")
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            #(b/b/λ)
            elif Pila_Valida.tope()=="b" and caracter=="b" and estado_actual=="q1":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"b"
                QtTest.QTest.qWait(1000)
                self.Tr1.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                Pila_Valida.desapilar()
                engine.say("continúa en Estado q1. leyendo una b")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.Tr1.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            #(a/a/λ)
            elif Pila_Valida.tope()=="a" and caracter=="a" and estado_actual=="q1":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"a"
                QtTest.QTest.qWait(1000)
                self.Tr4.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                Pila_Valida.desapilar()
                engine.say("continúa en estado q1. leyendo una a")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.Tr4.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            #(λ/#/#)
            elif Pila_Valida.tope()=="#" and estado_actual=="q1" and bandera==len(palabra):
                #self.label.setText(mostrando_cadena_recorrida)
                self.Tr3.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Aceptacion.jpg"))
                estado_actual="q2"
                QtTest.QTest.qWait(1000)
                self.Tr3.setStyleSheet("color: rgb(0, 0, 0);")
                engine.say("pasa al Estado De aceptacion leyendo vacío. La palabra es palindrome")
                engine.runAndWait()
                self.label.setText("SI ES PALINDROME")
                bandera=bandera+1
                self.imagen_robot.setPixmap(QtGui.QPixmap("automata_imagen_aceptada.png"))
                self.listWidget.addItem("#")
                #self.Palabra.setStyleSheet("background-color: rgb(207,232, 162);")
                self.label.setVisible(True)
                msg=QtWidgets.QMessageBox()
                msg.setText("ES PALINDROME")
                msg.setStyleSheet("color: green")
                msg.show()
                msg.exec()
                self.label.clear()
                self.Verifica_rapido.setEnabled(True)
                self.Verifica_Lento.setEnabled(True)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
                self.Palabra.setEnabled(True)
                
            #(b/#/#b) 
            elif Pila_Valida.tope()=="#" and caracter=="b" and estado_actual=="q0":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"b"
                self.Tr5.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("#")
                Pila_Valida.apilar("b")
                engine.say("Estado inicial q0. leyendo una b")
                engine.runAndWait()
                QtTest.QTest.qWait(1000) 
                self.Tr5.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            #(c/#/#)
            elif Pila_Valida.tope()=="#" and caracter=="c" and estado_actual=="q0":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"c"
                self.Tr12.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                engine.say("pasa al estado q1. leyendo una c")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.Tr12.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            #b/b/bb
            elif Pila_Valida.tope()=="b" and caracter=="b" and estado_actual=="q0":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"b"
                QtTest.QTest.qWait(1000)
                self.Tr9.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("b")
                Pila_Valida.apilar("b")
                engine.say("continúa en Estado inicial q0. leyendo una b")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.Tr9.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            #(c/a/a)
            elif Pila_Valida.tope()=="a" and caracter=="c" and estado_actual=="q0":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"c"
                self.Tr2.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("a")
                engine.say("pasa al estado q1. leyendo una c")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.Tr2.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem("a")
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            #(a/b/ba)
            elif Pila_Valida.tope()=="b" and caracter=="a" and estado_actual=="q0":
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+"a"
                self.Tr7.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("b")
                Pila_Valida.apilar("a")
                engine.say("continúa en Estado inicial q0. leyendo una a")
                engine.runAndWait()
                QtTest.QTest.qWait(1000)
                self.Tr7.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
                self.label.setText(mostrando_cadena_recorrida)
                Tamaño_list=Pila_Valida.tamano()
                self.listWidget.clear()
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
                
            else:
                mostrando_cadena_recorrida=mostrando_cadena_recorrida+caracter
                engine.say("Se quedó sin camino y no finalizó en un estado de aceptacion")
                engine.runAndWait()
                self.label.setText(mostrando_cadena_recorrida)
                self.label.setStyleSheet("color: red;")
                self.imagen_robot.setPixmap(QtGui.QPixmap("automata_imagen_denegado.jpg"))
                msg=QtWidgets.QMessageBox()
                msg.setText("se quedó sin camino NO ES PALINDROME")
                msg.setStyleSheet("color: red")
                msg.show()
                msg.exec()
                msg=QtWidgets.QMessageBox()
                break

        if estado_actual != "q2":
            engine.say("No es palindrome")
            engine.runAndWait()
            self.label.setText("NO ES PALINDROME")
            self.label.setStyleSheet("color: red")
            msg=QtWidgets.QMessageBox()
            msg.setText("debe ser de la forma: ZcZ^(-1), Z=(a*,b*)")
            msg.setStyleSheet("color: red")
            msg.show()
            msg.exec()
            self.label.clear()
            self.Automata.setPixmap(QtGui.QPixmap("Imagen1_Automata.jpg"))
            Tamaño_list=Pila_Valida.tamano()
            self.listWidget.clear()
            if caracter != "c":
                self.listWidget.addItem(caracter)
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            else:
                for i in range(1,Tamaño_list+1):
                    self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            self.Verifica_rapido.setEnabled(True)
            self.Verifica_Lento.setEnabled(True)
            self.Palabra.setEnabled(True)
def crear_pila_vacia():
    obj = Pila()

    return obj
Exemplo n.º 29
0
    if arbol.valor == "+":
        return evaluar(arbol.izq) + evaluar(arbol.der)
    if arbol.valor == "-":
        return evaluar(arbol.izq) - evaluar(arbol.der)
    if arbol.valor == "/":
        return evaluar(arbol.izq) / evaluar(arbol.der)
    if arbol.valor == "*":
        return evaluar(arbol.izq) * evaluar(arbol.der)
    return int(arbol.valor)


class Nodo():
    def __init__(self, val, izq=None, der=None):
        self.valor = val
        self.izq = izq
        self.der = der


if __name__ == "__main__":
    f = open('expresiones.in', 'r')
    pf = f.read().split()
    print(pf)
    f.close()
    p = Pila()
    convertir(pf, p)
    fin = p.es_vacia
    f2 = open("expresiones.out", "w")
    while (p.es_vacia() == False):
        f2.write(str(evaluar(p.desapilar())) + '\n')
    f2.close()
Exemplo n.º 30
0
    def Simulador_Automata_rapido(self):
        self.listWidget.clear()
        self.Palabra.setEnabled(False)
        self.Verifica_rapido.setEnabled(False)
        self.Verifica_Lento.setEnabled(False)
        self.imagen_robot.setPixmap(QtGui.QPixmap("automata_imagen.png"))
        palabra=self.Palabra.text()+"#"
        Pila_Valida=Pila()
        Pila_Valida.apilar("#")
        engine = pyttsx3.init()
        rate = engine.getProperty('rate')
        engine.setProperty('rate', rate-60)
        estado_actual="q0"
        bandera=1
        for caracter in palabra:
            #(a/#/#a)
            if Pila_Valida.tope()=="#" and caracter=="a" and estado_actual=="q0":
                self.Tr10.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("#")
                Pila_Valida.apilar("a")
                self.Tr10.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(a/a/aa)   
            elif Pila_Valida.tope()=="a" and caracter=="a" and estado_actual=="q0":
                self.Tr6.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("a")
                Pila_Valida.apilar("a")
                self.Tr6.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(b/a/ab)
            elif Pila_Valida.tope()=="a" and caracter=="b" and estado_actual=="q0":
                self.Tr8.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("a")
                Pila_Valida.apilar("b")
                self.Tr8.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(c/b/b)
            elif Pila_Valida.tope()=="b" and caracter=="c" and estado_actual=="q0":
                self.Tr11.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("b")
                self.Tr11.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(b/b/λ)
            elif Pila_Valida.tope()=="b" and caracter=="b" and estado_actual=="q1":
                QtTest.QTest.qWait(1000)
                self.Tr1.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                Pila_Valida.desapilar()
                self.Tr1.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(a/a/λ)
            elif Pila_Valida.tope()=="a" and caracter=="a" and estado_actual=="q1":
                QtTest.QTest.qWait(1000)
                self.Tr4.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                Pila_Valida.desapilar()
                self.Tr4.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(λ/#/#)
            elif Pila_Valida.tope()=="#" and estado_actual=="q1" and bandera==len(palabra):
                self.Tr3.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Aceptacion.jpg"))
                estado_actual="q2"
                self.Tr3.setStyleSheet("color: rgb(0, 0, 0);")
                #self.Palabra.setStyleSheet("background-color: rgb(207,232, 162);")
                self.imagen_robot.setPixmap(QtGui.QPixmap("automata_imagen_aceptada.png"))
                engine.say("palindrome")
                engine.runAndWait()
                self.label.setText("SI ES PALINDROME")
                self.label.setStyleSheet("color: GREEN")
                bandera=bandera+1
                self.label.setVisible(True)
                msg=QtWidgets.QMessageBox()
                msg.setText("ES PALINDROME")
                msg.setStyleSheet("color: green")
                msg.show()
                msg.exec()
                self.label.setVisible(True)
                self.Verifica_rapido.setEnabled(True)
                self.Verifica_Lento.setEnabled(True)
                self.Palabra.setEnabled(True)
                
            #(b/#/#b) 
            elif Pila_Valida.tope()=="#" and caracter=="b" and estado_actual=="q0":
                self.Tr5.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("#")
                Pila_Valida.apilar("b")
                self.Tr5.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(c/#/#)
            elif Pila_Valida.tope()=="#" and caracter=="c" and estado_actual=="q0":
                self.Tr12.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                self.Tr12.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #b/b/bb
            elif Pila_Valida.tope()=="b" and caracter=="b" and estado_actual=="q0":
                self.Tr9.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("b")
                Pila_Valida.apilar("b")
                self.Tr9.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(c/a/a)
            elif Pila_Valida.tope()=="a" and caracter=="c" and estado_actual=="q0":
                self.Tr2.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen3_Automata.jpg"))
                estado_actual="q1"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("a")
                self.Tr2.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            #(a/b/ba)
            elif Pila_Valida.tope()=="b" and caracter=="a" and estado_actual=="q0":
                self.Tr7.setStyleSheet("color: rgb(11, 143, 38);")
                self.Automata.setPixmap(QtGui.QPixmap("Imagen2_Automata.jpg"))
                estado_actual="q0"
                Pila_Valida.desapilar()
                Pila_Valida.apilar("b")
                Pila_Valida.apilar("a")
                self.Tr7.setStyleSheet("color: rgb(0, 0, 0);")
                bandera=bandera+1
            else:
                engine.say("No palindrome")
                engine.runAndWait()
                self.imagen_robot.setPixmap(QtGui.QPixmap("automata_imagen_denegado.jpg"))
                msg=QtWidgets.QMessageBox()
                msg.setText("se quedó sin camino NO ES PALINDROME")
                msg.setStyleSheet("color: red")
                msg.show()
                msg.exec()
                

                break

        if estado_actual != "q2":
            self.label.setText("NO ES PALINDROME")
            self.label.setStyleSheet("color: red")
            msg=QtWidgets.QMessageBox()
            msg.setText("debe ser de la forma: ZcZ^(-1), Z=(a*,b*)")
            msg.show()
            msg.setStyleSheet("color: red")
            msg.exec() 
            self.label.setVisible(False)
            self.Automata.setPixmap(QtGui.QPixmap("Imagen1_Automata.jpg"))  
            Tamaño_list=Pila_Valida.tamano()
            self.listWidget.clear()
            for i in range(1,Tamaño_list+1):
                self.listWidget.addItem(Pila_Valida.mostrar()[Tamaño_list-i])
            
            self.Verifica_rapido.setEnabled(True)
            self.Verifica_Lento.setEnabled(True)
            self.Palabra.setEnabled(True)