Поглиблений курс розробки на Python
Розділ
>
Рівень
Розширені списки
Відображення, Фільтрація, Згортання
Мета
Завершіть змішування та виробництво морозива, використовуючи Maps, Filter та Reduce.
Деякі смаки морозива є низькими або порожніми, але у нас достатньо матеріалів, щоб компенсувати недостачу та зібрати більше морозива. Для цього ви маєте використовувати Map, потужний інструмент, який дозволяє мінімізувати обсяг коду, що вам потрібно написати, скорочуючи цикли та розгалуження коду. Функції Filter та Reduce є доповненням до функції Map і забезпечують необхідну гнучкість у програмуванні.
Для початку вам потрібно імпортувати Reduce з бібліотеки functools, щоб використовувати функцію, додавши цей код на початку програми: from functools import reduce. Функції Map та Filter вбудовані в Python і не потребують імпорту.
Спочатку вам необхідно забрати кілька інгредієнтів з морозильної камери, пройти до позначки золотого X, звернутися до дверей і відкрити їх за допомогою функції open(). Заберіть усі банки з "cream" з морозильної камери, а потім пройдіть до позначки світлого X на зеленому килимі.
У полі є три (3) константи-списки з назвами: vanilla, strawberry та chocolate. Кожна константа має комбінацію інгредієнтів, що формують смак морозива. На зеленій позначці X перевірте вміст константи-списку strawberry. Спочатку використайте функцію place(), щоб відкласти "cream", який ви попередньо забрали, а потім використайте функцію speak(), щоб перевірити вміст константи-списку strawberry.
Після перевірки настав час використати функцію Map з константою-списком strawberry, де всі елементи є десятковими числами. Використовуючи функцію map(), ви можете округлити всі елементи списку, замінюючи необхідність ітерувати кожен елемент у циклі для поодинокого округлення. Для цього створіть список з назвою map1 і використайте функцію map() разом з константою-списком strawberry і функцією round(), таким чином: map1 = list(map(round, strawberry)). Після цього використайте функцію speak() з map1, щоб перевірити результат.
Після цього переходимо до Filter. Вона працює за аналогією з Map, але для неї потрібна допоміжна функція. У верхній частині редактора у вас є попередньо задана функція з назвою main_ingredients, яка визначає, чи є число більшим за 25.
def main_ingredients(value):
return value > 25
Замість того, щоб обходити список у циклі, ви можете використати цю функцію разом із функцією filter(), щоб скласти новий список з елементів, що перевищують 25, тобто основних інгредієнтів. Створіть новий список з назвою filter1 і застосуйте функцію filter() з main_ingredients та map1, щоб визначити всі основні інгредієнти з Map-списку, який ви створили, таким чином: filter1 = list(filter(main_ingredients, value)). Після цього використайте функцію speak() з filter1, щоб перевірити результат.
Тепер переходимо до Reduce. Вона використовується подібним чином до Filter, але дозволяє звести список до одного єдиного значення. Як і Filter, вона використовує власну функцію, цього разу з назвою custom_sum, яка динамічно додає два числа разом.
def custom_sum(first, second):
return first + second
Створіть змінну з назвою reduce1 і використайте функцію reduce() разом з функцією custom_sum і filter1, щоб об'єднати всі елементи в одне єдине значення, таким чином: reduce1 = reduce(custom_sum, filter1). Після цього використайте функцію speak() з reduce1, щоб перевірити результат.
Тепер, коли ви завершили цикл Map, Filter, Reduce, повторіть той самий цикл на позначках світлого X на червоних і синіх килимах. На червоному килимі використайте константу-список vanilla і створіть map2, filter2 та reduce2. На синьому килимі використайте константу-список chocolate і створіть map3, filter3 та reduce3.
Пройдіть до останньої позначки світлого X, що розташована на фіолетовому килимі, і додайте reduce1, reduce2 та reduce3, об'єднуючи основні інгредієнти ванілі, полуниці та шоколаду. Створіть змінну з назвою neapolitan і додайте всі результати Reduce, таким чином: neapolitan = reduce1+reduce2+reduce3. Використайте функцію speak() для перевірки комбінації та функцію place() для створення неаполітанського морозива і завершення рівня.