/
Andrey_Tishenkov
/
preparing_for_interviews
Обзор
Документация
Войти
/
Andrey_Tishenkov
/
preparing_for_interviews
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
stack_homework.py
140 строк
6 KB
Andrey_Tishenkov
upload files
07 ноя 2025, 20:38
07 ноя 2025, 20:38
3c78ac3
Код
Авторство
О чём код?
class Stack: def __init__(self): self.items = [] def isEmpty(self): # Проверка стека на пустоту return len(self.items) == 0 def push(self, item): # Добавляет новый элемент на вершину стека self.items.append(item) def pop(self): # Удаляет верхний элемент стека и возвращает его if not self.isEmpty(): return self.items.pop() else: raise IndexError("Попытка извлечения из пустого стека") def peek(self): # Возвращает верхний элемент стека, но не удаляет его if not self.isEmpty(): return self.items[-1] else: return None def size(self): # Возвращает количество элементов в стеке return len(self.items) def contains_only_brackets(string): # Проверяет, содержит ли строка только скобки allowed_chars = '()[]{}' for char in string: if char not in allowed_chars: return False return True def is_balanced(brackets_string): # Проверяет сбалансированность скобок в строке # Создаем стек для хранения открывающих скобок stack = Stack() # Словарь для соответствия открывающих и закрывающих скобок bracket_pairs = { ')': '(', ']': '[', '}': '{' } # Проходим по каждому символу в строке for char in brackets_string: # Если это открывающая скобка - добавляем в стек if char in '([{': stack.push(char) # Если это закрывающая скобка elif char in ')]}': # Если стек пуст или верхний элемент не соответствует закрывающей скобке if stack.isEmpty() or stack.peek() != bracket_pairs[char]: return "Несбалансированно" # Если соответствует - удаляем открывающую скобку из стека else: stack.pop() # После обработки всех символов стек должен быть пустым if stack.isEmpty(): return "Сбалансированно" else: return "Несбалансированно" def get_brackets_input(): # Получает корректный ввод от пользователя - только скобки while True: user_input = input("Введите строку со скобками (только ()[]{}): ").strip() # Обработка пустой строки if not user_input: print("\nВы ничего не ввели!") while True: choice = input("Хотите выйти или начать заново? (y/n): ").strip().lower() if choice in ['y', 'yes', 'д', 'да']: print("Выход из программы.") return None # Возвращаем None для выхода elif choice in ['n', 'no', 'н', 'нет']: print("Продолжаем...\n") break # Продолжаем цикл ввода else: print("Пожалуйста, введите 'y' для выхода или 'n' для продолжения.") continue # Возвращаемся к началу цикла ввода # Проверяем, что все символы - скобки valid_chars = '()[]{}' has_invalid_chars = False invalid_chars = [] for char in user_input: if char not in valid_chars: has_invalid_chars = True if char not in invalid_chars: invalid_chars.append(char) if has_invalid_chars: print(f"Ошибка! Строка содержит недопустимые символы: {', '.join(invalid_chars)}") print("Разрешены только: ( ) [ ] { }") print("Пожалуйста, попробуйте снова.\n") else: return user_input # Основная программа if __name__ == "__main__": print("=== Программа проверки сбалансированности скобок ===") print("Проверяет корректность расстановки скобок: (), [], {}") while True: user_input = get_brackets_input() # Если пользователь выбрал выход if user_input is None: break result = is_balanced(user_input) print(f"Результат: {result}") # Спрашиваем, хочет ли пользователь продолжить print("\n" + "="*50) while True: continue_choice = input("Хотите проверить другую строку? (y/n): ").strip().lower() if continue_choice in ['y', 'yes', 'д', 'да']: print("\n" + "="*50) break elif continue_choice in ['n', 'no', 'н', 'нет']: print("Спасибо за использование программы! До свидания!") exit() else: print("Пожалуйста, введите 'y' для продолжения или 'n' для выхода.")