Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau
Geavanceerde lijsten
Mappen, Filteren, Reduceren
Doel
Maak de ijsmakerij af door gebruik te maken van Maps, Filter en Reduce.
Sommige van de ijssmaken zijn laag of leeg, maar we hebben genoeg ingrediënten om te compenseren en meer ijs te maken. Hiervoor moet je Map gebruiken, een krachtig hulpmiddel waarmee je de hoeveelheid code die je moet schrijven minimaliseert door lussen en vertakkende code samen te voegen. De Filter en Reduce functies zijn complementair aan de Map functie en bieden de broodnodige veelzijdigheid aan je codering.
Om te beginnen moet je de Reduce importeren uit de functools bibliotheek om de functie te kunnen gebruiken. Voeg deze code bovenaan je programma toe: from functools import reduce. De Map en Filter functies zijn ingebouwd in Python en hoeven niet geïmporteerd te worden.
Eerst moet je wat ingrediënten pakken uit de walk-in vriezer, lopen naar het gouden X-teken, naar de deur lopen en deze openen met behulp van de open() functie. Pak alle potten met "cream" in de vriezer en loop vervolgens naar het lichte X-teken op het groene tapijt.
Er zijn drie (3) lijst-constanten op het terrein met de namen: vanilla, strawberry en chocolate. Elke constante bevat een combinatie van ingrediënten die de ijssmaak bepalen. Controleer bij het groene X-teken de inhoud van de strawberry lijst-constante. Gebruik eerst de place() functie om de "cream" die je eerder hebt gepakt af te leggen en gebruik de speak() functie om de inhoud van de strawberry lijst-constante te verifiëren.
Zodra dit is gebeurd, is het tijd om de Map functie te gebruiken met de strawberry lijst-constante; de inhoud van de lijst bestaat volledig uit decimale getallen. Met de map() functie kun je alle elementen in een lijst afronden, waardoor het niet nodig is om elk element één voor één in een lus af te ronden. Maak hiervoor een lijst aan genaamd map1 en gebruik de map() functie in combinatie met de strawberry lijst en de round() functie, als volgt: map1 = list(map(round, strawberry)). Zodra dit is gedaan, gebruik je de speak() functie met map1 om het resultaat te verifiëren.
Als dat klaar is, gaan we verder met Filter. Dit werkt op dezelfde manier als Map, maar in plaats daarvan vereist het een functie die in combinatie wordt gebruikt. Bovenaan de editor heb je een vooraf gedefinieerde functie genaamd main_ingredients die bepaalt of een getal hoger is dan het getal 25.
def main_ingredients(value):
return value > 25
In plaats van een lus te doorlopen, kun je deze functie samen met de filter() functie gebruiken om een nieuwe lijst samen te stellen met items die hoger zijn dan 25, de hoofd ingrediënten. Maak een nieuwe lijst genaamd filter1 en pas de filter() functie toe met main_ingredients en map1 om alle hoofd ingrediënten in de Map lijst die je hebt aangemaakt te bepalen, als volgt: filter1 = list(filter(main_ingredients, value)). Zodra dit is gedaan, gebruik je de speak() functie met filter1 om het resultaat te verifiëren.
Nu gaan we verder met Reduce. Deze wordt op dezelfde wijze gebruikt als Filter, maar in plaats daarvan gebruik je hem om een lijst samen te voegen of te reduceren tot een enkele eenheid. Net als bij Filter, maakt hij gebruik van een aangepaste functie, dit keer genaamd custom_sum die dynamisch twee getallen bij elkaar optelt.
def custom_sum(first, second):
return first + second
Maak een variabele aan genaamd reduce1 en gebruik de reduce() functie in combinatie met de custom_sum functie en filter1 om alle items samen te voegen tot een enkele eenheid, als volgt: reduce1 = reduce(custom_sum, filter1). Zodra dit is gedaan, gebruik je de speak() functie met reduce1 om het resultaat te verifiëren.
Nu je de Map, Filter, Reduce cyclus hebt voltooid, herhaal je dezelfde cyclus op de lichte X-tekens op rode en blauwe tapijten. Op het rode tapijt gebruik je de vanilla lijst-constante en maak je map2, filter2 en reduce2. Op het blauwe tapijt gebruik je de chocolate lijst-constante en maak je map3, filter3 en reduce3.
Loop naar het laatste lichte X-teken dat zich op het paarse tapijt bevindt, voeg reduce1, reduce2 en reduce3 samen om de hoofd ingrediënten van vanille, aardbei en chocolade te combineren. Maak een variabele aan genaamd neapolitan en tel alle Reduce resultaten bij elkaar op, als volgt: neapolitan = reduce1+reduce2+reduce3. Gebruik de speak() functie met de combinatie om deze te verifiëren en gebruik de place() functie ermee om Neapolitan ijs te maken en het level te voltooien.