def inicio(): pila = Pila() m = input("ingreso en post-orden:").split(" ") k = len(m) for j in range(0, k): y = m[j] if y in ["+", "-", "*", "/"]: if (len(pila.items) >= 2): der = pila.desapilar() izq = pila.desapilar() nodo = Nodo(y, izq, der) x = evaluar(nodo) pila.apilar(x) else: print("estructura incorrecta") else: y = int(y) pila.apilar(y) print(pila.desapilar())
def inicio(): pila1=Pila() pila2=Pila() pila3=Pila() pila4=Pila() print("Bienvenido") while True: print ("1-Agregar Pelicula") print ("2-Buscar Pelicula") print ("3-Salir") x=input("Digite una opcion: ") x=int(x) if x==1: genero=input("Genero de la Pelicula? ") actor=input("Actor de la Pelicula? ") pelicula=Pelicula(genero,actor) pila1.apilar(pelicula) elif x==2: g=input("Genero de la Pelicula? ") while len(pila1.items) != 0: pelicula=pila1.desapilar() if(g==pelicula.Genero): pila3.apilar(pelicula) else pila2.apilar(pelicula) a=input("Actor de la Pelicula? ") while len(pila3.items) != 0: pelicula=pila3.desapilar() if(a==pelicula.Actor): print ("Pelicula encontrada") pila4.apilar(pelicula) else pila2.apilar(pelicula) while len(pila2.items)!= 0: pelicula=pila2.desapilar() pila1.apilar(pelicula) while len(pila3.items)!= 0: pelicula=pila3.desapilar() pila1.apilar(pelicula) elif x==3: break else: print ("ingrese una opcion valida")
def reversa(lista): long = len(lista) if long > 1: pila = Pila() i = 0 while i < long: pila.apilar(lista[i]) i = i + 1 j = 0 while (not pila.vacia()): lista[j] = pila.tope() pila.desapilar() j = j + 1
class Compilador: def __init__(self): self.pila = Pila() self.operadores = ['-','+','*','/'] def posOrden(self,operacion): # Inicializa un nuevo objeto tipo Pila self.pila.__init__() for i in operacion: # Compara con un arreglo de operaciones definido if i in self.operadores: # Tienen que existir por lo menos dos numeros en la pila para una operación if self.pila.get_size() >= 2: a = self.pila.desapilar() b = self.pila.desapilar() if i == '-': self.pila.apilar(b-a) elif i == '+': self.pila.apilar(b+a) elif i == '*': self.pila.apilar(b*a) else: if a != 0: self.pila.apilar(round((b/a),2)) else: return "Error - Division por cero" else: return "Error - Operacion incompleta faltan operandos o valores" # Todo lo que no se una operación lo apila # TODO: Faltaria un elif para comparar si es una variable ej: x,y,z else: try: self.pila.apilar(float(i)) except ValueError: return "Error - Valor no valido: '" + i + "'" # Tiene que existir un unico valor en la pila al finalizar las operaciones if self.pila.get_size() == 1: return self.pila.desapilar() else: return "Error - Valores sin evaluar"
def capicua(string) : # RV = False long = len(string) listaDer = [] listaIzq = [] pila = Pila() i = 0 while i < long : pila.apilar(string[i]) i = i + 1 while pila.tope() != "#" : listaDer = listaDer + [pila.tope()] pila.desapilar() # print listaDer pila.desapilar() # desapilo el # while not pila.vacia() : listaIzq = listaIzq + [pila.tope()] pila.desapilar() # print listaIzq reversa(listaDer) # print listaDer RV = (listaIzq == listaDer) # print RV return RV
def inicio(): pila = Pila() pila2 = Pila() pila3 = Pila() print("ingrese vacio para Terminar") while True: m = raw_input("ingreso en post-orden:").split(" ") k = len(m) if m == '': break print("final") if k == 0: break print("final") for j in range(0, k): y = m[j] if (y == "="): while len(pila2.items) != 0: variable = pila2.desapilar() pila3.apilar(variable) print(variable.Nombre, "=", variable.Valor) elif y in ["+", "-", "*", "/"]: if (len(pila.items) >= 2): der = pila.desapilar() izq = pila.desapilar() nodo = Nodo(y, izq, der) x = evaluar(nodo) pila.apilar(x) else: print("estructura incorrecta") else: try: y = int(y) pila.apilar(y) except: if (m[j + 1] == "="): variable = Variable(y, pila.desapilar()) pila2.apilar(variable) print("variable correcta") else: while len(pila2.items) != 0: variable = pila2.desapilar() pila3.apilar(variable) if (y == variable.Nombre): pila.apilar(variable.Valor) while len(pila3.items) != 0: variable = pila3.desapilar() pila2.apilar(variable) print(pila.desapilar())
def capicua(string): long = len(string) RV = True # si len es 1 entonces string="#" y por lo tanto es capicúa. # la precondición es que el string sea no vacío. if long > 1: pila = Pila() i = 0 while string[i] != "#": pila.apilar(string[i]) i = i + 1 i = i + 1 #para pasar el "#" while not pila.vacia() and i < long and string[i] == pila.tope(): pila.desapilar() i = i + 1 RV = (i == long and pila.vacia()) return RV
from Pila import * class Libro: def __init__(self, nombre, cat, autor): self.nombre = nombre self.cat = cat self.autor = autor pila = Pila() pila.apilar(Libro("El Cartero de los Suenos", " Infantil", "Laura Gallego")) pila.apilar(Libro("Un fantasma en apuros", " Infantil", "Laura Gallego")) pila.apilar(Libro("Max ya no hace reir", " Infantil", "Laura Gallego")) pila.apilar(Libro("Donde esta Alba?", " Infantil", "Laura Gallego")) pila.apilar( Libro("Alba tiene una amiga muy especial", " Infantil", "Laura Gallego")) pila.apilar(Libro("Por una rosa", "Relatos", "Laura Gallego")) pila.apilar(Libro("Manana todavia. ", "Relatos", "Laura Gallego")) print("La pila tiene ", pila.tamano(), " libros \n") while pila.es_vacia() == False: Libro = pila.desapilar() print(pila.tamano() + 1, ")", Libro.nombre) print("Categoria: ", Libro.cat) print("Autor: ", Libro.autor) print("\n")
class Automata_impar: """automata_act=['p','p','p','q','q','q'] automata_api=['#','a','b','#','a','b'] automata_MH=['a','b','c','e'] automata_Mt=[['p','p','q',' '], ['p','p','q',' '], ['p','p','q',' '], [' ',' ',' ','r'], ['q',' ',' ',' '], [' ','q',' ',' ']] automata_Ma=[['#a','#b','#',' '], ['aa','ab','a',' '], ['ba','bb','b',' '], [' ',' ',' ','#'], ['e',' ',' ',' '], [' ','e',' ',' ']]""" transicion_p = None transicion_q = None transicion_r = None arcos = [] def __init__(self, cadena): self.pila = Pila() self.bandera = False self.i = -1 self.transicion_p = True self.transicion_q = False self.transicion_r = False self.palabra = cadena self.verificar() self.definir() """self.arcos.append(Arco('p','p','#','a','#a')) self.arcos.append(Arco('p','p','#','b','#b')) self.arcos.append(Arco('p','q','#','c','#')) self.arcos.append(Arco('p','p','a','a','aa')) self.arcos.append(Arco('p','p','a','b','ab')) self.arcos.append(Arco('p','q','a','c','a')) self.arcos.append(Arco('p','p','b','a','ba')) self.arcos.append(Arco('p','p','b','b','bb')) self.arcos.append(Arco('p','q','b','c','b')) self.arcos.append(Arco('q','r','#','e','#')) self.arcos.append(Arco('q','q','a','a','e')) self.arcos.append(Arco('q','q','b','b','e'))""" def verificar(self): if (self.palabra.count("c") == 1): cad1, cad2 = self.palabra.split("c") if (cad1 == cad2[::-1]): self.bandera = True def definir(self): arco = Arco('p', 'p', '#', 'a', '#a') self.arcos.append(arco) arco = Arco('p', 'p', '#', 'b', '#b') self.arcos.append(arco) arco = Arco('p', 'q', '#', 'c', '#') self.arcos.append(arco) arco = Arco('p', 'p', 'a', 'a', 'aa') self.arcos.append(arco) arco = Arco('p', 'p', 'a', 'b', 'ab') self.arcos.append(arco) arco = Arco('p', 'q', 'a', 'c', 'a') self.arcos.append(arco) arco = Arco('p', 'p', 'b', 'a', 'ba') self.arcos.append(arco) arco = Arco('p', 'p', 'b', 'b', 'bb') self.arcos.append(arco) arco = Arco('p', 'q', 'b', 'c', 'b') self.arcos.append(arco) arco = Arco('q', 'r', '#', 'e', '#') self.arcos.append(arco) arco = Arco('q', 'q', 'a', 'a', 'e') self.arcos.append(arco) arco = Arco('q', 'q', 'b', 'b', 'e') self.arcos.append(arco) def ejecucion(self, caracter_palabra, verifica): if (self.transicion_p == True and verifica == 0): print("estoy en p") verifica = 1 for arco in self.arcos: if (arco.estadoActual() == 'p' and arco.caracterTransicion() == self.pila.elementos[-1] and caracter_palabra == arco.nombreArco()): print(caracter_palabra + "\n") print(self.pila.elementos) self.pila.desapilar() print(self.pila.elementos) self.pila.apilar(arco.caracterApilar()) print(self.pila.elementos) if (arco.estadoSiguiente() == 'q'): self.transicion_p = False self.transicion_q = True self.transicion_r = False break if (self.transicion_q == True and verifica == 0): print("estoy en q") verifica = 1 for arco in self.arcos: if (arco.estadoActual() == 'q' and arco.caracterTransicion() == self.pila.elementos[-1] and caracter_palabra == arco.nombreArco()): print(self.pila.elementos) self.pila.desapilar() print(self.pila.elementos) self.pila.apilar(arco.caracterApilar()) print(self.pila.elementos) if (arco.estadoSiguiente() == 'r'): self.transicion_p = False self.transicion_q = False self.transicion_r = True break if (self.transicion_r == True): print("estoy en r") verifica = 1 def programa(self): for letras in self.palabra: if (self.transicion_r == False): print("lee " + letras + "\n") self.ejecucion(letras, 0) #print(self.transicion_p) #print(self.transicion_q) #print(self.transicion_r) if (self.transicion_r == True): break #self.i=self.i+1 else: break if (self.pila.elementos[-1] == '#' and self.transicion_r == False and len(self.pila.elementos) == 1): print("toma e") self.ejecucion('e', 0) self.conclusion() def conclusion(self): #print(self.i) #print(len(self.palabra)) if (self.transicion_r == True and self.bandera == True): print("es Palindromo") else: print("no es Palindromo")
def procesar(self): text = "Error en los datos ingresados, deben ser 1, 2, 3 o B y no repetirlos" k = 0; C=Pila(); cont = 0; final=[0]*4; pilaf=[0]*4; Found=Pila(); pilaf[0]=str(_fromUtf8(self.lineEdit.text())) pilaf[1]=str(_fromUtf8(self.lineEdit_2.text())) pilaf[2]=str(_fromUtf8(self.lineEdit_3.text())) pilaf[3]=str(_fromUtf8(self.lineEdit_4.text())) for i in range(len(pilaf)): try: pilaf[i]=int(pilaf[i]) except(ValueError,TypeError): if pilaf[i] == 'b' or pilaf[i] == 'B': pilaf[i] = 'B' pass else: QMessageBox.information(self.iface.mainWindow(),"test", "%s" % (text), QMessageBox.Ok) final[0]=str(_fromUtf8(self.lineEdit_5.text())) final[1]=str(_fromUtf8(self.lineEdit_6.text())) final[2]=str(_fromUtf8(self.lineEdit_7.text())) final[3]=str(_fromUtf8(self.lineEdit_8.text())) for i in range(len(final)): try: final[i]=int(final[i]) except(ValueError,TypeError): if final[i] == 'b' or final[i] == 'B': final[i] = 'B' pass else: QMessageBox.information(self.iface.mainWindow(),"test", "%s" % (text), QMessageBox.Ok) C.apilar(pilaf) while(pilaf != final or k < 20): C.desapilar() derecha, sux = Resolv(final, pilaf, 'R') if C.vacia(): C.apilar(derecha) else: for i in range(len(C.items)): if sonListasIguales(C.items[i], derecha) == False: cont += 1 if cont == len(C.items): C.apilar(derecha) cont = 0 izq, sux1 = Resolv(final, pilaf, 'I') if C.vacia(): C.apilar(izq) else: for i in range(len(C.items)): if sonListasIguales(C.items[i], izq) == False: cont += 1 if cont == len(C.items): C.apilar(izq) cont = 0 for i in range(len(pilaf)): pilaf[i] = derecha[i] self.textBrowser.append("%s" % C.items) k += 1
class Automata_par: transicion_p = None transicion_q = None transicion_r = None arcos = [] def __init__(self, cadena): self.pila = Pila() self.bandera = False self.i = -1 self.transicion_p = True self.transicion_q = False self.transicion_r = False self.palabra = cadena self.verificar() self.definir() def verificar(self): mitad = int(len(self.palabra) / 2) if (len(self.palabra) % 2 == 0): cad1 = self.palabra[:mitad] cad2 = self.palabra[mitad:] if (cad1 == cad2[::-1]): self.bandera = True def definir(self): arco = Arco('p', 'p', '#', 'a', '#a') self.arcos.append(arco) arco = Arco('p', 'p', '#', 'b', '#b') self.arcos.append(arco) #arco=Arco('p','p','a','a','aa') #self.arcos.append(arco) arco = Arco('p', 'q', 'a', 'a', 'e') self.arcos.append(arco) arco = Arco('p', 'p', 'a', 'b', 'ab') self.arcos.append(arco) arco = Arco('p', 'p', 'b', 'a', 'ba') self.arcos.append(arco) #arco=Arco('p','p','b','b','bb') #self.arcos.append(arco) arco = Arco('p', 'q', 'b', 'b', 'e') self.arcos.append(arco) arco = Arco('q', 'r', '#', 'e', '#') self.arcos.append(arco) arco = Arco('q', 'q', 'a', 'a', 'e') self.arcos.append(arco) arco = Arco('q', 'q', 'b', 'b', 'e') self.arcos.append(arco) def ejecucion(self, caracter_palabra, verifica): if (self.transicion_p == True and verifica == 0): print("estoy en p") verifica = 1 for arco in self.arcos: if (arco.estadoActual() == 'p' and arco.caracterTransicion() == self.pila.elementos[-1] and caracter_palabra == arco.nombreArco()): print(caracter_palabra + "\n") print(self.pila.elementos) self.pila.desapilar() print(self.pila.elementos) self.pila.apilar(arco.caracterApilar()) print(self.pila.elementos) if (arco.estadoSiguiente() == 'q'): self.transicion_p = False self.transicion_q = True self.transicion_r = False break if (self.transicion_q == True and verifica == 0): print("estoy en q") verifica = 1 for arco in self.arcos: if (arco.estadoActual() == 'q' and arco.caracterTransicion() == self.pila.elementos[-1] and caracter_palabra == arco.nombreArco()): print(self.pila.elementos) self.pila.desapilar() print(self.pila.elementos) self.pila.apilar(arco.caracterApilar()) print(self.pila.elementos) if (arco.estadoSiguiente() == 'r'): self.transicion_p = False self.transicion_q = False self.transicion_r = True break if (self.transicion_r == True): print("estoy en r") verifica = 1 def programa(self): for letras in self.palabra: if (self.transicion_r == False): print("lee " + letras + "\n") self.ejecucion(letras, 0) print(self.transicion_p) print(self.transicion_q) print(self.transicion_r) if (self.transicion_r == True): break else: break if (self.pila.elementos[-1] == '#' and self.transicion_r == False and len(self.pila.elementos) == 1): print("toma e") self.ejecucion('e', 0) self.conclusion() def conclusion(self): if (self.transicion_r == True and self.bandera == True): print("es Palindromo") else: print("no es Palindromo")
def inicio(): pila = Pila() pila2 = Pila() pila3 = Pila() token = Lex() exp_valor = re.compile('[0-9]+$') exp_operador = re.compile('[\+\*\-/=]{1,1}$') exp_variable = re.compile('([a-z]+)([A-Z0-9_]*)$') print("ingrese vacio para Terminar") while True: m = input("ingreso en post-orden:").split(" ") k = len(m) if (k < 2): break for j in range(0, k): y = m[j] if (token.operador(y)): if (y == "="): while len(pila2.items) != 0: variable = pila2.desapilar() pila3.apilar(variable) print(variable.Nombre, "=", variable.Valor) while len(pila3.items) != 0: variable = pila3.desapilar() pila2.apilar(variable) else: if (len(pila.items) >= 2): der = pila.desapilar() izq = pila.desapilar() nodo = Nodo(y, izq, der) x = evaluar(nodo) pila.apilar(x) else: print("estructura incorrecta") elif (token.valor(y)): y = int(y) pila.apilar(y) elif (token.variable(y)): if (m[j + 1] == "="): variable = Variable(y, pila.desapilar()) pila2.apilar(variable) else: while len(pila2.items) != 0: variable = pila2.desapilar() if (y == variable.Nombre): pila.apilar(variable.Valor) pila3.apilar(variable) while len(pila3.items) != 0: variable = pila3.desapilar() pila2.apilar(variable) else: print("entrada incorrecta para: ", y) print(pila.desapilar()) token.tabla()