Skip to content

Урок 46. Stack — Undo

Тривалість: 45–60 хв
Рівень: Algorithm Explorer

Познайомся зі стеком через систему Undo.

stack = []
stack.append("draw circle")
stack.append("move player")
last_action = stack.pop()

💡 Пояснення простою мовою

Section titled “💡 Пояснення простою мовою”

Стек — це як стос тарілок: кладеш зверху (append), забираєш зверху (pop). Останнє, що ти поклав — перше, що візьмеш. Це називається LIFO (Last In — First Out).

🧩 Розбираємо по рядках

Section titled “🧩 Розбираємо по рядках”
  • stack = [] — порожній стос тарілок
  • stack.append(...) — кладемо тарілку зверху
  • stack.pop() — забираємо верхню тарілку
stack = []
stack.append("Намалювати коло")
stack.append("Рух гравця")
stack.append("Стріляти")
print(stack[-1]) # Стріляти (остання дія)
undone = stack.pop() # Забрали: Стріляти
print(stack[-1]) # Рух гравця (тепер остання)
graph TD
    A["append draw circle"] --> B["append move player"]
    B --> C["append shoot"]
    C --> D["pop → shoot"]
    D --> E["pop → move player"]
    style C fill:#ff9800,color:#fff
    style D fill:#4caf50,color:#fff
  1. Стек із 5 дій.
  2. Undo через .pop().
  3. Оброби пустий stack.
  4. Покажи верхню дію.

🙋 Підказка до завдання 3: спробуй pop() на порожньому стеку — буде помилка! Використай if stack: перед pop().

Створи просту систему Undo.

Хоча б раз за урок спробуй передбачити результат коду до запуску. Після запуску порівняй прогноз із реальністю.

Навмисно зламай одну частину програми. Прочитай traceback або спостережи неправильну поведінку, знайди причину й виправ її.

✅ Урок завершено, якщо Марко може

Section titled “✅ Урок завершено, якщо Марко може”
  • пояснити головну ідею своїми словами;
  • виконати основні завдання без копіювання готового рішення;
  • змінити програму під нову вимогу;
  • знайти й виправити хоча б одну власну помилку.

Покращ Challenge однією власною ідеєю. Перед кодом сформулюй її одним реченням.

💡 Підказка для дорослого

Section titled “💡 Підказка для дорослого”

Не виправляйте код одразу. Краще запитайте: «Що ти очікував? Що сталося? Який рядок за це відповідає? Що можна перевірити?»