Продвинутый курс разработки на Python
Глава
>
Уровень
Продвинутые списки
Отображение, Фильтрация, Свертка
Цель
Закончить смешивание и производство мороженого с использованием функций Map, 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(), чтобы создать неаполитанское мороженое и завершить уровень.