Проверить правильность расстановки скобок в 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
^
Пожалуйста, укажите на ошибку.