es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Revisando la validez de una expresión que contiene paréntesis anidados utilizando una pila.

Quiero usar la pila para verificar la validez de una expresión que contiene paréntesis anidados.
Escribí el código de abajo pero cuando mi entrada es [{[]}, el código no devuelve nada, pero esperaba que devolviera “los paréntesis izquierdos son más que los derechos”.
Además, cuando mi entrada es (), en lugar de ser “balanceado”, ¡la respuesta es “desparejado”!
¿Cuál es mi error en el código escrito?

class Stack:
    def __init__(self):
        self.items = []

def is_empty(self):
    return self.items == []

def push(self, data):
    self.items.append(data)
    return

def pop(self):
    self.items.pop()

def match(left, right):
    if left == '[' and right == ']':
        return True
    elif left == '{' and right == '}':
        return True
    elif left == '(' and right == ')':
        return True
    else:
        return False

def validity(text):
    st = Stack()

    for i in text:
        if i in '[{(':
            st.push(i)
        if i in ']})':
            if st.is_empty():
                print('los paréntesis derechos son más que los izquierdos')
                return False
            else:
                compare = st.pop()
                if not match(compare, i):
                    print('desparejado')
                    return False

    if st.is_empty():
        print('balanceado')
    else:
        print('los paréntesis izquierdos son más que los derechos')

for j in range(4):
    example = input('por favor ingresa un texto ')
    validity(example)
Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay un par de errores en el código que deben corregirse para que funcione correctamente.

    1. En el método pop de la clase Stack, necesitamos realmente devolver el elemento que se ha eliminado en lugar de simplemente eliminarlo.
    def pop(self):
        return self.items.pop()
    
    1. En la función validity, el método pop de la clase Stack debe ser llamado con un índice de -1, ya que queremos eliminar el último elemento de la lista, no el primero.
    compare = st.pop(-1)
    

    Con estos cambios, la función validity debería funcionar como se espera para los casos de prueba dados.

Comments are closed.