Проверить правильность расстановки скобок в Python?В чём ошибка?

Вот код функции для проверки правильности расстановки различных скобок в многострочной строке с нужным для меня ввыводом в консоль:

def find_unmatched_brackets(multiline_str):
    bracket_pairs = {'(': ')', '{': '}', '[': ']'}
    opening_brackets = set(bracket_pairs.keys())
    closing_brackets = set(bracket_pairs.values())
    
    stack = []
    lines = multiline_str.splitlines()
    
    for line_num, line in enumerate(lines, start=1):
        for char_index, char in enumerate(line):
            if char in opening_brackets:
                stack.append((char, line_num, char_index, line))
            elif char in closing_brackets:
                if stack and bracket_pairs[stack[-1][0]] == char:
                    stack.pop()
                else:
                    stack.append((char, line_num, char_index, line))
    
    unmatched = []
    for bracket, line_num, char_index, line in stack:
        if bracket in opening_brackets:
            unmatched.append((f"Unmatched opening bracket '{bracket}' at line {line_num}, position {char_index + 1}", line, char_index))
        else:
            unmatched.append((f"Unmatched closing bracket '{bracket}' at line {line_num}, position {char_index + 1}", line, char_index))
    
    for message, line, char_index in unmatched:
        print(message)
        print(line)
        print(' ' * char_index + '^')

Вот пример использования функции:

# Example usage
multiline_str = """def example():
    print("Hello, World!")
    if (a > b) {
        for i in range(5):
            print(i
        }
    """

find_unmatched_brackets(multiline_str)

Но, почему-то, функция выдаёт неправильный результат. Результат:

Unmatched opening bracket '{' at line 3, position 16
    if (a > b) {
               ^
Unmatched opening bracket '(' at line 5, position 18
            print(i
                 ^
Unmatched closing bracket '}' at line 6, position 9
        }
        ^

Желаемый результат:

Unmatched opening bracket '(' at line 5, position 18
            print(i
                 ^

Пожалуйста, укажите на ошибку.


Ответы (0 шт):