py_bracket_validator · Python
▶ Aprender py_bracket_validator (Python) paso a paso · explicación de py_bracket_validator
Código línea a línea
Tres columnas: el código, el trozo del subject o del main que obliga a escribir esa línea, y el por qué.
py_bracket_validator.py
| Código | Subject | Por qué |
|---|---|---|
def bracket_validator(s: str) -> bool: | def bracket_validator(s: str) -> bool: | Firma del subject. Devuelve bool, no 0/1. |
pairs = {")": "(", "]": "[", "}": "{"} | Allowed brackets: (), [], {} | Cada cierre apunta a su apertura. Así la comprobación es una sola línea. |
stack = [] | in the correct order | Pila de aperturas pendientes. "Orden correcto" = la última abierta es la primera que debe cerrar. |
for ch in s: | Carácter a carácter. | |
if ch in "([{": | every opening bracket | Apertura: a la pila. |
stack.append(ch) | Pendiente de cerrar. | |
elif ch in pairs: | has a matching closing bracket | Cierre: tiene que casar con la última apertura. |
if not stack or stack.pop() != pairs[ch]: | in the correct order | Pila vacía (cierre sin apertura) o la apertura no es la suya (([)]): inválido. El not stack va primero para no hacer pop de una lista vacía. |
return False | Falla. | |
return not stack | every opening bracket has a matching closing bracket | Al final la pila debe estar vacía: ((()) deja una abierta → False. Y vacío da True. |