def __init__(self, nombre, contraseña): self.__nombre = nombre self.__contraseña = contraseña self.__cola = Cola() self.__pila = Pila() #self.__matriz = Matriz() #self.__matrizTranspuesta = self.__validacionXML = False
def infixToSufix(regexInfijo): #alfabeto = "abcdefghijklmnopqrstuvxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" #operadores = "+|*." #agrupadores = "()[]}{" pila = Pila() salida = "" for char in regexInfijo: #print("pila antes Iter con:", char) #pila.print() #print("Salida antes de Iter:", salida) if char in alfabeto: salida += char elif char in operadores or char in agrupadores: if pila.isEmpty() or pila.getTop() == '(': pila.push(char) elif char == '(': pila.push(char) elif char == ')': while not pila.isEmpty() and pila.getTop() != '(': salida += pila.pop() if pila.getTop() == '(': pila.pop() elif pila.getTop() not in agrupadores and getPrecedence( char) > getPrecedence(pila.getTop()): pila.push(char) elif pila.getTop() not in agrupadores and getPrecedence( char) == getPrecedence(pila.getTop()): if not pila.isEmpty(): if pila.getTop() in '+*': #Asociacion R -> L pila.push(char) elif pila.getTop() in ".|": #Asociacion L -> R salida += pila.pop() pila.push(char) elif pila.getTop() not in agrupadores and getPrecedence( char) < getPrecedence(pila.getTop()): salida += pila.pop() while not pila.isEmpty() and \ pila.getTop() not in agrupadores and \ getPrecedence(char) < getPrecedence(pila.getTop()): salida += pila.pop() if not pila.isEmpty() and \ pila.getTop() not in agrupadores and \ getPrecedence( pila.getTop() ) == getPrecedence(char): #Desempate if pila.getTop() in '+*': #Asociacion R -> L pila.push(char) elif pila.getTop() in ".|": #Asociacion L -> R salida += pila.pop() pila.push(char) continue pila.push( char ) #Si no se cumple el if anterior, quiere decir que la precedencia del tope de la pila será mayor al del char en cuestion else: return "Caracter no soportado: '" + char + "'" #print("pila despues de iter: ") #pila.print() #print("Salida despues de Iter:", salida) #print("................................................") while not pila.isEmpty(): salida += pila.pop() return salida
def operar(self): operacion = self.post aux = "" self.pasos = "" pila = Pila() if operacion != None: for caracter in operacion: #------------------------------------contatedo numero if caracter >= '0' and caracter <= '9': aux = aux + caracter #-------------------------------apilar numero elif caracter == " ": if aux != "": self.pasos = self.pasos + "push(" + aux + ")," pila.push(int(aux)) aux = "" #-------------------------------- sumo numeros elif caracter == "+": numero2 = pila.pop() numero1 = pila.pop() self.pasos = self.pasos + "pop(),pop()," if numero1 != None and numero2 != None: resultado = numero1 + numero2 self.pasos = self.pasos + str(numero1) + " + " + str( numero2) + " = " + str(resultado) + "," pila.push(resultado) self.pasos = self.pasos + "push(" + str( resultado) + ")," else: self.pasos = self.pasos + "Error de syntaxis :(" return "false" #-------------------- resto numeros elif caracter == "-": numero2 = pila.pop() numero1 = pila.pop() if numero1 != None and numero2 != None: resultado = numero1 - numero2 self.pasos = self.pasos + str(numero1) + " - " + str( numero2) + " = " + str(resultado) + "," pila.push(resultado) self.pasos = self.pasos + "push(" + str( resultado) + ")," else: self.pasos = self.pasos + "Error de syntaxis :(" return "false" #---------------------------- multiplico numeros elif caracter == "*": numero2 = pila.pop() numero1 = pila.pop() self.pasos = self.pasos + "pop(),pop()," if numero1 != None and numero2 != None: resultado = numero1 * numero2 self.pasos = self.pasos + str(numero1) + " + " + str( numero2) + " = " + str(resultado) + "," pila.push(resultado) self.pasos = self.pasos + "push(" + str( resultado) + ")," else: self.pasos = self.pasos + "Error de syntaxis :(" return "false" #---------------------------- multiplico numeros elif caracter == "/": numero2 = pila.pop() numero1 = pila.pop() self.pasos = self.pasos + "pop(),pop()," if numero1 != None and numero2 != None: resultado = numero1 / numero2 self.pasos = self.pasos + str(numero1) + " / " + str( numero2) + " = " + str(resultado) + "," pila.push(resultado) self.pasos = self.pasos + "push(" + str( resultado) + ")," else: self.pasos = self.pasos + "Error de syntaxis :(" return "false" #------------------------------ cacater raro elif caracter == "\t" or caracter == "\n": pass else: pass self.resultado = pila.pop() if pila.vacio() == False: self.pasos = self.pasos + "Error de syntaxis :(" return "false" else: self.pasos = self.pasos + "Resultado = " + str(resultado) return "true" #print("Respuesta:",self.resultado) else: self.pasos = self.pasos + "Error de syntaxis :(" return "false"
class Usuario: def __init__(self, nombre, contraseña): self.__nombre = nombre self.__contraseña = contraseña self.__cola = Cola() self.__pila = Pila() #self.__matriz = Matriz() #self.__matrizTranspuesta = self.__validacionXML = False def get_nombre(self): return self.__nombre def get_contraseña(self): return self.__contraseña def agregar_operacion(self, dato): self.__cola.enqueue(dato) def extraer_operacion(self): return self.__cola.dequeue() def mostrar_operacion(self): self.__cola.mostrar() def crear_matriz(self, x, y): pass def get_validacionXML(self): return self.__validacionXML def set_validacionXML(self, validar): self.__validacionXML = validar def operar(self): operacion = self.__cola.dequeue() aux = "" self.__pila.vaciar_pila() if operacion != None: for caracter in operacion: #------------------------------------contatedo numero if caracter >= '0' and caracter <= '9': aux = aux + caracter #-------------------------------apilar numero elif caracter == " ": if aux != "": print("Apilando:", aux) self.__pila.push(int(aux)) aux = "" #-------------------------------- sumo numeros elif caracter == "+": numero2 = self.__pila.pop() numero1 = self.__pila.pop() if numero1 != None and numero2 != None: resultado = numero1 + numero2 print("Sumo: ", numero1, "+", numero2) self.__pila.push(resultado) print("Apilo:", resultado) else: print("Error de syntaxis :(") #-------------------- resto numeros elif caracter == "-": numero2 = self.__pila.pop() numero1 = self.__pila.pop() if numero1 != None and numero2 != None: resultado = numero1 - numero2 print("Resto: ", numero1, "-", numero2) self.__pila.push(resultado) print("Apilo:", resultado) else: print("Error de syntaxis :(") #---------------------------- multiplico numeros elif caracter == "*": numero2 = self.__pila.pop() numero1 = self.__pila.pop() if numero1 != None and numero2 != None: resultado = numero1 * numero2 print("Multiplico: ", numero1, "*", numero2) self.__pila.push(resultado) print("Apilo:", resultado) else: print("Error de syntaxis :(") #------------------------------ cacater raro elif caracter == "\t" or caracter == "\n": pass else: print('Caracter no reconocido:', caracter) print("Respuesta:", self.__pila.pop()) else: print("Ya no hay operaciones! :(")
def postorden(self): numero = Pila() signo = Pila() num = "" result = "" if self.mensaje == "": return "false" for caracter in self.mensaje: if caracter == "(" or caracter == " " or caracter == "\t" or caracter == "\n" or caracter == "": pass elif caracter >= "0" and caracter <= "9": num = num + caracter elif caracter == "+" or caracter == "-" or caracter == "*" or caracter == "/": if num != "": numero.push(num) num = "" signo.push(caracter) elif caracter == ")": if num != "": numero.push(num) num = "" valSigno = signo.pop() if valSigno != None: numero.push(valSigno) else: return "false" if signo.vacio() == False: return "false" for cadena in numero.mostrar(): if cadena != None: result = cadena + " " + result self.post = result.strip() return "true"