Curso Avançado de Desenvolvimento Python
Capítulo
>
Nível
Listas Avançadas
Mapear, Filtrar, Reduzir
Objetivo
Finalize a mistura e produção do sorvete utilizando Map, Filter e Reduce.
Alguns dos sabores de sorvete estão baixos ou vazios, mas temos materiais suficientes para compensar e produzir mais sorvete. Para isso, você deve usar o Map, uma ferramenta poderosa que permite minimizar a quantidade de código que você precisa escrever, condensando loops e estruturas condicionais. As funções Filter e Reduce são complementares à função Map e oferecem a versatilidade necessária para o seu código.
Para começar, você precisa importar o Reduce da biblioteca functools para poder usar a função, adicionando o seguinte código no início do seu programa: from functools import reduce . As funções Map e Filter já vêm integradas no Python e não precisam ser importadas.
Primeiro, você precisa pegar alguns ingredientes no freezer, caminhar até a marca de X dourado, virar para a porta e abri-la usando a função open(). Pegue todos os potes de "cream" que estão no freezer e, em seguida, caminhe até a marca de X iluminada sobre o tapete verde.
Existem três (3) constantes de lista no campo nomeadas: vanilla, strawberry e chocolate. Cada constante possui uma combinação de ingredientes que constitui o sabor do sorvete. Na marca de X verde, verifique o conteúdo da constante de lista strawberry. Primeiro, use a função place() para depositar o "cream" que você pegou anteriormente e depois use a função speak() para verificar o conteúdo da constante de lista strawberry.
Uma vez verificado, é hora de usar a função Map com a constante de lista strawberry, em que todos os elementos da lista são decimais. Utilizando a função map(), você pode arredondar todos os elementos de uma lista, substituindo a necessidade de iterar cada elemento em um loop para arredondá-los um por um. Para isso, crie uma lista chamada map1 e use a função map() em conjunto com a lista strawberry e a função round(), assim: map1 = list(map(round, strawberry)) . Depois, use a função speak() com map1 para verificar o resultado.
Com isso concluído, passamos para o Filter, que funciona de forma semelhante ao Map, mas, em vez disso, requer que uma função seja usada em conjunto. No topo do editor você terá uma função predefinida chamada main_ingredients que é utilizada para determinar se um número é maior que o número 25.
def main_ingredients(value):
return value > 25
Em vez de percorrer um loop, você pode usar essa função em conjunto com a função filter() para criar uma nova lista com os itens que são maiores que 25, considerados os ingredientes principais. Crie uma nova lista chamada filter1 e aplique a função filter() com main_ingredients e map1 para determinar todos os ingredientes principais encontrados na lista criada com Map, assim: filter1 = list(filter(main_ingredients, value)) . Depois, use a função speak() com filter1 para verificar o resultado.
Agora passamos para o Reduce, que é usado de maneira similar ao Filter, mas que permite colapsar ou reduzir uma lista a uma única unidade. Assim como o Filter, ele utiliza uma função personalizada, desta vez chamada custom_sum, que adiciona dinamicamente dois números.
def custom_sum(first, second):
return first + second
Crie uma variável chamada reduce1 e use a função reduce() em conjunto com a função custom_sum e filter1 para consolidar todos os itens em uma única unidade, assim: reduce1 = reduce(custom_sum, filter1) . Depois, use a função speak() com reduce1 para verificar o resultado.
Agora que você completou o ciclo Map, Filter, Reduce, repita o mesmo ciclo nas marcas de X iluminadas sobre os tapetes vermelho e azul. No tapete vermelho, use a constante de lista vanilla e crie map2, filter2 e reduce2. No tapete azul, use a constante de lista chocolate e crie map3, filter3 e reduce3.
Caminhe até a marca de X final, que está sobre o tapete roxo, e adicione reduce1, reduce2 e reduce3, combinando os ingredientes principais de vanilla, strawberry e chocolate. Crie uma variável chamada neapolitan e some todos os resultados do Reduce, assim: neapolitan = reduce1+reduce2+reduce3 . Use a função speak() com essa combinação para verificá-la e use a função place() com ela para criar o sorvete Napolitano e completar o nível.