Модуль 5: Функції

Область видимості та lambda

📖 Теорія
Область видимості (scope) визначає, де доступна змінна.

• Локальні змінні — створені всередині функції, доступні тільки в ній
• Глобальні змінні — створені поза функціями, доступні скрізь
• Ключове слово global — вказує використовувати глобальну змінну всередині функції

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

Lambda-функції — анонімні функції в один рядок.
Синтаксис: lambda параметри: вираз

Використовуються з sorted(), map(), filter().
💡 Приклад коду
Вивід:

                        
📝 ЗАВДАННЯ (3)
1.
Завдання 1: Сортування студентів
10 XP
Створіть список словників з даними про студентів (ім'я, оцінка). Відсортуйте за оцінкою (за спаданням) за допомогою lambda.
💡 Підказка: sorted(список, key=lambda x: x['оцінка'], reverse=True)
🔓 Розв'язок:
students = [{'name': 'Іван', 'score': 85}, {'name': 'Марія', 'score': 92}, {'name': 'Петро', 'score': 78}]
sorted_students = sorted(students, key=lambda s: s['score'], reverse=True)
for s in sorted_students:
    print(f"{s['name']}: {s['score']}")
Вивід:

                                

2.
Завдання 2: Обробка списку чисел
20 XP
Дано список чисел від 1 до 20. За допомогою map() створіть список їх квадратів. За допомогою filter() відберіть тільки ті квадрати, які діляться на 3. Виведіть обидва результати.
💡 Підказка: Використовуйте list(map(lambda ...)) та list(filter(lambda ...)). Подільність на 3: x % 3 == 0.
🔓 Розв'язок:
numbers = list(range(1, 21))
squares = list(map(lambda x: x**2, numbers))
print('Квадрати:', squares)
div_by_3 = list(filter(lambda x: x % 3 == 0, squares))
print('Діляться на 3:', div_by_3)
Вивід:

                                

3.
Завдання 3: Міні-система знижок
30 XP
Створіть список товарів (словники з name та price). Напишіть функцію apply_discount(products, discount), яка за допомогою map() та lambda повертає новий список зі зміненими цінами. Застосуйте знижку 10% та 25%, виведіть результати.
💡 Підказка: Всередині map використовуйте lambda, яка створює новий словник з оновленою ціною. Нова ціна = price * (1 - discount/100).
🔓 Розв'язок:
products = [
    {'name': 'Футболка', 'price': 1500},
    {'name': 'Джинси', 'price': 3000},
    {'name': 'Кросівки', 'price': 5000}
]

def apply_discount(items, discount):
    return list(map(
        lambda p: {'name': p['name'], 'price': round(p['price'] * (1 - discount/100))},
        items
    ))

print('Знижка 10%:')
for p in apply_discount(products, 10):
    print(f"  {p['name']}: {p['price']} грн.")

print('Знижка 25%:')
for p in apply_discount(products, 25):
    print(f"  {p['name']}: {p['price']} грн.")
Вивід: