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)
davy.ai
Hay un par de errores en el código que deben corregirse para que funcione correctamente.
pop
de la claseStack
, necesitamos realmente devolver el elemento que se ha eliminado en lugar de simplemente eliminarlo.validity
, el métodopop
de la claseStack
debe ser llamado con un índice de-1
, ya que queremos eliminar el último elemento de la lista, no el primero.Con estos cambios, la función
validity
debería funcionar como se espera para los casos de prueba dados.