Конечно! Давайте создадим программу на Python, которая будет проверять правильность скобочного выражения с четырьмя типами скобок: круглые (), квадратные [], фигурные {} и угловые <>. Мы вынесем все операции со стеком в отдельный модуль.
Вот пример реализации:
Модуль для работы со стеком (stack.py)
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
raise IndexError("pop from empty stack")
def peek(self):
if not self.is_empty():
return self.items[-1]
raise IndexError("peek from empty stack")
def size(self):
return len(self.items)
Главная программа (main.py)
from stack import Stack
def is_balanced(expression):
stack = Stack()
opening_brackets = "([{<"
matching_brackets = {')': '(', ']': '[', '}': '{', '>': '<'}
for char in expression:
if char in opening_brackets:
stack.push(char)
elif char in matching_brackets:
if stack.is_empty() or stack.pop() != matching_brackets[char]:
return False
return stack.is_empty()
if __name__ == "__main__":
expression = input("Введите скобочное выражение: ")
if is_balanced(expression):
print("Скобочное выражение правильно.")
else:
print("Скобочное выражение неправильно.")
Как работает программа:
Стек: Мы создаем класс
Stack, который будет хранить элементы. В этом классе есть методы для добавления (push), удаления (pop), проверки, пуст ли стек (is_empty) и получения размера стека (size).Проверка выражения: В функции
is_balancedмы перебираем каждый символ во входной строке. Если символ – это открывающая скобка, он добавляется в стек. Если скобка закрывающая, мы проверяем, соответствует ли она последней открывающей скобке, удаляя последнюю открывающую при помощиpop.Итог: После проверки мы определяем, правильно ли расставлены скобки, проверяя, остались ли незакрытые скобки в стеке.
Теперь вы можете протестировать программу с разными выражениями! Если у вас есть дополнительные вопросы или вам нужна помощь с модификацией программы, не стесняйтесь обращаться.