# diccionario para saber cual es el cierre de cada simbolo simbols = { "[": "]", "(": ")", "{": "}" } # devuelve True si es un simbolo de apertura si no es apertura devuelve False def isopenSimbol(key): if key in simbols: return True else: return False def parseString(stringtest): # array que usamos como una pila LIFO openStack = [] for car in range(len(cadena)): currSimbol = stringtest[car] print(openStack) if isopenSimbol(currSimbol): openStack.append(currSimbol) else: stacksize = int(len(openStack)) # tamaƱo actual de la pila if stacksize>0: # si contiene elementos de apertura comparamos con el elemento detectado de cierre actual lastOpen = openStack[stacksize-1] if simbols[lastOpen] == currSimbol: # si el caracter actual es un caracter de cierre del ultimo abierto lo quitamos de la pila openStack.pop() # quitamos el ultimo elemento de la pila if len(openStack)>=1: return False else: return True ## inicio cadena = input("Introduce cadena ") tamcadena = len(cadena) if tamcadena % 2 != 0 and isopenSimbol(cadena[0]) == False: # numero de elementos impares o el primero es un cierre print("Error") else: if parseString(cadena): print(f"cadena {cadena} correcta") else: print(f"cadena {cadena} incorrecta")