Función para balancear parentesis
Publicado por Nicolás (1 intervención) el 21/10/2022 23:54:03
Hola!
Necesito ayuda para generar un código que devuelva True si las expresiones tienen los parentesis balanceados y False si no lo están.
Para expresiones que contengan otros caracteres ademas de parentesis.
Vengo viendo tutoriales e intentan distintos cambios pero no me doy cuenta en qué esta fallando. A continuación pego el código que generé. Con ciertas expresiones funciona bien pero con otras no por ejemplo:
Con el siguiente input:
(x+y)*(x-z)-9
Devuelve:
False
Con el siguiente input si funciona:
(x-8*(2*5+(2)
Devuelve:
False
Desde ya agradezco cualquier sugerencia para orientarme.
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def push(self, item):
self.items.insert(0, item)
def pop(self):
return self.items.pop(0)
def print_stack(self):
print(self.items)
def balanced(expression):
s = Stack()
balanced = True
index = 0
while index < len(expression) and balanced:
paren = expression[index]
if paren in "(":
s.push(paren)
else:
if s.is_empty():
balanced = False
else:
if paren in ")":
s.pop()
index += 1
if s.is_empty() and balanced:
return True
else:
return False
print(balanced(input()))
Necesito ayuda para generar un código que devuelva True si las expresiones tienen los parentesis balanceados y False si no lo están.
Para expresiones que contengan otros caracteres ademas de parentesis.
Vengo viendo tutoriales e intentan distintos cambios pero no me doy cuenta en qué esta fallando. A continuación pego el código que generé. Con ciertas expresiones funciona bien pero con otras no por ejemplo:
Con el siguiente input:
(x+y)*(x-z)-9
Devuelve:
False
Con el siguiente input si funciona:
(x-8*(2*5+(2)
Devuelve:
False
Desde ya agradezco cualquier sugerencia para orientarme.
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def push(self, item):
self.items.insert(0, item)
def pop(self):
return self.items.pop(0)
def print_stack(self):
print(self.items)
def balanced(expression):
s = Stack()
balanced = True
index = 0
while index < len(expression) and balanced:
paren = expression[index]
if paren in "(":
s.push(paren)
else:
if s.is_empty():
balanced = False
else:
if paren in ")":
s.pop()
index += 1
if s.is_empty() and balanced:
return True
else:
return False
print(balanced(input()))
1
Valora esta pregunta


0