students = ['Олена', 'Іван', 'Марія']
grades = [10, 8, 12]Практична №4.2
📌 План на сьогодні
- Dictionaries
- Live coding
- Tuples and sets
- Q&A
- Your task
❓ Що таке словники і навіщо вони потрібні?
Минулого разу ми вивчили Списки (Lists). Вони ідеальні для впорядкованих даних: sales = [1500, 2100, 1850]
Наприклад, у нас є студенти та їхні оцінки.” “Як би ми це зробили списками?”
📋📋 Паралельні списки
Це жахливо. Як дістати оцінку Івана?
Треба знайти ‘Івана’ в students. (Він на індексі 1).
Потім взяти елемент з індексом 1 зі списку grades. -> 8. Це складно, і все ламається, якщо ми видалимо ‘Олену’
💡 Рішення (майже) всіх проблем
Тут нам на допомогу приходять словники!
Словник - це структура даних, яка зберігає пари “ключ-значення”.
student_grades = {
'Олена': 10,
'Іван': 8,
'Марія': 12,
'key': value
}Як дістати оцінку? Дуже просто:
print( student_grades['Іван'] )
# our dict key
# We're using a key to get a valueВластивості словників
- Словники зберігають дані у вигляді
key : valueЦе “серце” словника. Кожен елемент — це пара.
student = { 'name': 'Олена', 'course': 2 }'name'— це Ключ (Key).'Олена’ — це Значення (Value).
- Правила ключів:
- Унікальні: один ключ не може мати два значення. Якщо ви спробуєте старе значення просто перезапишеться.
- Зазвичайключами є рядки або числа. Списки не можуть бути ключами
- Головні операції:
- Доступ: отримуємо значення за ключем
print( student['name'] ) # -> 'Олена'
# print( student[0] ) # -> ПОМИЛКА!- Додавання/заміна: Однаковий синтаксис. Якщо ключ є — змінює, якщо немає — створює.
student['course'] = 3 # Змінить 2 на 3
student['email'] = 'a@kse.ua' # Додасть нову пару- Перевірка: Оператор in (який ви знаєте зі списків) перевіряє наявність ключа.
if 'email' in student:
print("Email вже є!")- Довжина: len() рахує кількість пар.
len(student) # -> 3 (name, course, email)- Перебір:
for key, value in studnet.items()
👨🏻💻 Live coding
Задача:
- Створити словник
user_profileз ключамиusername(значення “alice”) таstatus(значення “online”). - Вивести status юзера “alice”.
- Оновити status на “offline”.
- Додати новий ключ email зі значенням “alice@kse.ua”.
- Вивести фінальний словник.
Задача:
Взяти
user_profileз минулого кроку.Перевірити, чи існує ключ “email”.
Якщо так, вивести
f"Email: {user_profile['email']}".Якщо ні, вивести
"Email не вказано".Перебрати весь словник і вивести всі пари “Ключ -> Значення”.
⚒️ Спецінструменти:
Tuples (кортежі)
Що це? Це як список, але НЕЗМІННИЙ (immutable).
Аналогія: “Список, залитий у бетон”.
Синтаксис: () (круглі дужки) my_tuple = (1, ‘a’, True)
Головна фішка: Їх не можна змінити після створення.
config_tuple = ('admin', 'pass123', 'kse.ua')
print(f"Юзер: {config_tuple[0]}, Сервер: {config_tuple[2]}")
# А тепер спробуємо змінити:
# config_tuple[0] = 'guest'
# ^ Це миттєво викличе TypeError: 'tuple' object does not support item assignmentSets (множини)
Що це? Це як список, але тільки УНІКАЛЬНІ елементи, і без порядку.
Аналогія: “Клуб унікальних”.
Синтаксис: set([ … ]) або {1, 2, 3}
Увага! {} — це порожній словник. Порожня множина створюється так: my_set = set().
visitors = ['Іван', 'Анна', 'Іван', 'Петро', 'Анна', 'Марія', 'Іван']
print(f"Список гостей (з дублікатами): {visitors}")
unique_visitors = set(visitors)
print(f"Унікальні гості (без дублікатів): {unique_visitors}")
print(f"Кількість унікальних: {len(unique_visitors)}")# Студенти, що взяли курс з Економіки
econ_students = {'Іван', 'Анна', 'Петро', 'Марія'}
# Студенти, що взяли курс зі Статистики
stat_students = {'Анна', 'Петро', 'Давид', 'Софія'}
# 1. Хто ходить на ОБИДВА курси? (Перетин)
both_courses = econ_students & stat_students
print(f"Ходять на обидва курси: {both_courses}")
# 2. Хто ходить ТІЛЬКИ на Економіку? (Різниця)
only_econ = econ_students - stat_students
print(f"Ходять тільки на Економіку: {only_econ}")
# 3. Який загальний список унікальних студентів? (Об'єднання)
all_students = econ_students | stat_students
print(f"Всі унікальні студенти: {all_students}")🔍 Задача: “Менеджер Інвентарю”
Завдання
Написати програму для простого складського обліку. Програма має дозволяти додавати товари на склад, оновлювати їхню кількість та перевіряти наявність.
Воркфлоу:
На початку програма створює один порожній словник:
inventory = {}. Цей словник буде зберігати всю інформацію (наприклад, {‘apples’: 50, ‘bananas’: 200}).Програма запускає нескінченний цикл
while True, який показує користувачу меню.В меню є 4 опції. Користувач вводить команду (
add,check,view,exit). Програма обробляє їх за допомогою if/elif/else.Команда
add(додати/оновити):Програма питає 2 речі:
item_name(назву товару) таquantity(кількість, int).Програма додає або оновлює цей товар у словнику
inventory.Логіка:
inventory[item_name] = quantityВиводить:
f"{item_name} додано/оновлено. Нова кількість: {quantity}"
Команда
check(перевірити):Програма питає
item_name.Програма перевіряє, чи є такий ключ у словнику.
Логіка:
if item_name in inventory:Якщо є: виводить
f"На складі є {item_name}. Кількість: {inventory[item_name]}"Якщо немає: виводить
f"Товар {item_name} не знайдено на складі."
Команда
view(переглянути все):Програма перебирає весь словник і гарно виводить його.
Логіка:
for key, value in inventory.items():--- Поточний Інвентар --- Apples: 50 Bananas: 200 --------------------------
Команда
exit:- Програма виводить “До побачення!” і виконує
break, щоб вийти з циклуwhile True.
- Програма виводить “До побачення!” і виконує