Практика: Списки та Кортежі

Сьогодні ти прокачаєш навички роботи зі списками: індекси, зрізи, методи, цикли, list comprehension, матриці, а також кортежі та unpacking.

Порада: у браузерних завданнях перевірка йде по шаблону. Пиши синтаксис акуратно, як у Python.

1 Додавання в список

Є список inventory = []. Який рядок коду коректно додасть "gold" в кінець?

2 Негативна індексація

Є список colors = ["red", "green", "blue", "yellow"]. Напиши вираз, який поверне передостанній елемент.

3 Зрізи із кроком

Є список colors = ["red", "green", "blue", "yellow"]. Напиши зріз, який візьме елементи ["red", "blue"] (тобто з 0 по 3 через один).

4 Вставка та розширення

Обери правильні варіанти:
A) вставити "yellow" на позицію 1 у списку colors
B) додати одразу список ["cyan", "black"] у кінець colors як окремі елементи

A)

B)

5 Видалення: pop / remove / clear

Який метод видаляє елемент і повертає його значення?

6 Фільтрація оцінок (for → list comprehension)

Є список: grades = [10, 5, 12, 8, 4, 11]. Напиши list comprehension, який створить список лише з оцінок >= 10.

Мінімум для проходження — щоб у відповіді було for g in grades. Але постарайся написати повний правильний вираз.

7 Матриці (список списків)

Є поле:

board = [
    ["X"," ","O"],
    [" ","X"," "],
    ["O"," ","X"]
]
Напиши вираз доступу, який поверне "O" з першого рядка і третього стовпчика.

8 Кортежі: незмінність + unpacking

Є кортеж: coordinates = (50.4501, 30.5234). Який рядок правильно “розпакує” значення у змінні lat і lon?

⭐ Бонус-питання: чому coordinates[0] = 51.0 викликає TypeError?
⌨️

Завдання для VS Code / IDLE

Це вже “майже проєкт”: попрактикуєш методи списків, перевірки, цикли, comprehension, роботу з матрицею та кортежами. Роби акуратно: кожне підзавдання — окрема функція або блок коду з тестовими прикладами.

🧰 1) Менеджер інвентарю (CRUD)

  • Створи items = ["sword", "map", "shield"].
  • Зроби меню в циклі while True: add / insert / remove / pop / show / clear / exit.
  • add: додає предмет у кінець (append).
  • insert: питає індекс і предмет (insert).
  • remove: видаляє за значенням (remove), якщо немає — виводь повідомлення без падіння програми.
  • pop: видаляє за індексом і друкує “випав предмет: ...”.
  • show: показує список і кількість через len().

🔎 2) Фільтрація та статистика оцінок

  • Згенеруй список з 10 чисел (можна вручну або через random).
  • Побудуй best = [g for g in grades if g >= 10].
  • Виведи: кількість “кращих”, мінімум/максимум у вихідному списку, і середнє (через sum()/len()).
  • Відсортуй список через .sort() і покажи перший та останній елементи.

🎮 3) Матриця 3×3: редагування клітинки

  • Створи поле board як 3×3 список списків (порожні клітинки — пробіл).
  • Запитай у користувача рядок і стовпчик (0–2) та символ ("X" або "O").
  • Онови клітинку board[row][col] = symbol і виведи поле красиво (рядок за рядком).
  • Додай перевірку: якщо клітинка зайнята — не перезаписуй.

📍 4) Кортежі: маршрут без змін

  • Створи кортеж start = (50.45, 30.52) і finish = (49.84, 24.03).
  • Розпакуй координати у змінні та надрукуй їх форматовано.
  • Спробуй змінити start[0], злови помилку через try/except і поясни її в коментарі.

🧪 5) Зрізи як інструмент (start:stop:step)

  • Створи список nums = list(range(1, 21)) (1..20).
  • Зроби 4 нові списки зрізами:
    • first5 — перші 5 елементів.
    • last5 — останні 5 елементів.
    • evens — кожен 2-й елемент зі списку (через step).
    • reversed_nums — список у зворотному порядку (через step -1).
  • Виведи всі 4 результати і коротко поясни в коментарях, як працює кожен зріз.

🧹 6) Очищення даних: remove / pop / clear

  • Є список: items = ["map", "torch", "map", "rope", "map", "food"].
  • Видали лише перший "map" через remove() і виведи список.
  • Потім видали останній елемент через pop(), збережи його в змінну dropped і надрукуй: "Випало: ...".
  • Якщо у списку залишилися "map", видали їх усі (цикл + remove або comprehension у новий список).
  • Наприкінці очисти список повністю через clear() і перевір через len(), що він порожній.

📦 7) extend vs append (вкладені структури)

  • Створи список bag = ["water", "bread"] і список loot = ["gold", "potion"].
  • Додай loot у bag двома способами:
    • bag.append(loot)
    • bag.extend(loot)
  • Після кожного способу виведи список і поясни в коментарі, чим відрізняється результат (особливо зверни увагу на вкладений список).
  • Додатково: дістань елемент "pot