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() 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 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): 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
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 procesar(self): text = "Error en los datos ingresados, deben ser 1, 2, 3 o B y no repetirlos" Fin=[1,2,3,'B']; C=Pila(); X=[3,2,1,'B']; Found=Pila(); X[0]=str(_fromUtf8(self.lineEdit.text())) X[1]=str(_fromUtf8(self.lineEdit_2.text())) X[2]=str(_fromUtf8(self.lineEdit_3.text())) X[3]=str(_fromUtf8(self.lineEdit_4.text())) for i in range(len(X)): try: X[i]=int(X[i]) except(ValueError,TypeError): if X[i] == 'b' or X[i] == 'B': X[i] = 'B' pass else: QMessageBox.information(self.iface.mainWindow(),"test", "%s" % (text), QMessageBox.Ok) #self.lineEdit.clear #self.lineEdit_2.clear #self.lineEdit_3.clear #self.lineEdit_4.clear #self.label.clear #self.treeView.reset #break print X C.apilar(X); Found.apilar(False) An, Con = Resolv(Fin, X, 'R') C.apilar(An); Found.apilar(Con) Bn, Con = Resolv(Fin, X, 'I') C.apilar(Bn); Found.apilar(Con) Cn, Con = Resolv(Fin, An, 'R') C.apilar(Cn); Found.apilar(Con) Dn, Con = Resolv(Fin, An, 'I') C.apilar(Dn); Found.apilar(Con) En, Con = Resolv(Fin, Bn, 'R') C.apilar(En); Found.apilar(Con) Fn, Con = Resolv(Fin, Bn, 'I') C.apilar(Fn); Found.apilar(Con) print C.items print Found.items print Found.items.index(True);
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()
#!/usr/bin/python # -*- coding: utf-8 -*- import sys from Pila import * class Libro: def __init__(self,nombre,genero,autor): self.nombre=nombre self.genero=genero self.autor=autor pila = Pila() pila.apilar(Libro("El Cartero de los Sueños","cuentos infantiles","Laura Gallego")) pila.apilar(Libro("Un fantasma en apuros","cuentos infantiles","Laura Gallego")) pila.apilar(Libro("Max ya no hace re¡r","cuentos infantiles","Laura Gallego")) pila.apilar(Libro("Donde est Alba?","cuentos infantiles","Laura Gallego")) pila.apilar(Libro("Alba tiene una amiga muy especial","cuentos infantiles","Laura Gallego")) pila.apilar(Libro("Por una rosa","relatos","Laura Gallego")) pila.apilar(Libro("Mañana todavia. ","relatos","Laura Gallego")) pila.apilar(Libro("El viaje del polizón","relatos","Laura Gallego")) pila.apilar(Libro("Relatos insólitos","relatos","Laura Gallego")) pila.apilar(Libro("Relatos de hoy II","relatos","Laura Gallego")) pila.apilar(Libro("Atlántico. 30 historias de los dos mundos","relatos","Laura Gallego")) pila.apilar(Libro("Historias para girar","relatos","Laura Gallego")) pila.apilar(Libro("Topito Terremoto","cuentos ilustrados","Anna Llenas")) pila.apilar(Libro("El Monstruo de Colores","cuentos ilustrados","Anna Llenas")) pila.apilar(Libro("El buit","cuentos ilustrados","Anna Llenas")) pila.apilar(Libro("Diario de las emociones","cuentos ilustrados","Anna Llenas"))
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")