Avanceret Python Udviklingskursus
Kapitel
>
Niveau
Avancerede lister
Kortlæg, Filtrer, Reducer
Mål
Afslut blanding og produktion af is ved at bruge Maps, Filter og Reduce.
Nogle af is-smagene er lave eller tomme, men vi har nok materialer til at kompensere og sammensætte mere is. For at gøre dette skal du bruge Map, et kraftfuldt værktøj, der lader dig minimere den mængde kode, du skal skrive, ved at kondensere løkker og forgrenet kode. Filter og Reduce funktionerne supplerer Map funktionen og giver den nødvendige alsidighed til din kodning.
For at komme i gang skal du importere Reduce fra functools biblioteket, således at du kan bruge funktionen ved at tilføje denne kode i starten af dit program: from functools import reduce. Map og Filter funktionerne er indbygget i Python og skal ikke importeres.
Først skal du hente nogle ingredienser fra walk-in fryseren, gå til guld X-mærket, vende dig mod døren og åbne den ved at bruge open() funktionen. Hent alle krukkerne med "cream" i fryseren, og gå derefter til det lyse X-mærke over det grønne tæppe.
Der er tre (3) listekonstanter i feltet med navnene: vanilla, strawberry og chocolate. Hver konstant har en kombination af ingredienser, der udgør is-smagen. Ved det grønne X-mærke skal du verificere indholdet af listekonstanten strawberry. Brug først place() funktionen til at afsætte den "cream", du tidligere hentede, og brug derefter speak() funktionen for at verificere indholdet af strawberry listekonstanten.
Når dette er verificeret, er det tid til at bruge Map funktionen på strawberry listekonstanten, da indholdet af listen alle er decimaltal. Ved at bruge map() funktionen kan du runde alle elementerne i en liste, hvilket erstatter behovet for at iterere gennem hvert element i en løkke for at runde dem enkeltvis. For at gøre dette skal du oprette en liste kaldet map1 og bruge map() funktionen i kombination med strawberry listen og round() funktionen, som dette: map1 = list(map(round, strawberry)). Når det er gjort, skal du bruge speak() funktionen med map1 for at verificere resultatet.
Når det er gjort, går vi videre til Filter, som fungerer på samme måde som Map, men i stedet kræver den, at der bruges en funktion i kombination. Øverst i editoren vil du have en forudindstillet funktion kaldet main_ingredients, som bruges til at bestemme, om et tal er højere end tallet 25.
def main_ingredients(value):
return value > 25
I stedet for at gennemløbe en løkke kan du bruge denne funktion i kombination med filter() funktionen for at sammensætte en ny liste med elementer, der er over 25, disse er hovedingredienserne. Opret en ny liste kaldet filter1 og anvend filter() funktionen med main_ingredients og map1 for at bestemme alle hovedingredienser, der findes i den Map liste, du lavede, som dette: filter1 = list(filter(main_ingredients, value)). Når det er gjort, skal du bruge speak() funktionen med filter1 for at verificere resultatet.
Nu går vi videre til Reduce, som bruges på samme måde som Filter, men i stedet kan du bruge den til at kollapse eller reducere en liste til en enkelt enhed. Ligesom Filter bruger den en brugerdefineret funktion, denne gang kaldet custom_sum, som dynamisk lægger to tal sammen.
def custom_sum(first, second):
return first + second
Opret en variabel kaldet reduce1 og brug reduce() funktionen i kombination med custom_sum funktionen og filter1 for at konsolidere alle elementerne til en enkelt enhed, som dette: reduce1 = reduce(custom_sum, filter1). Når det er gjort, skal du bruge speak() funktionen med reduce1 for at verificere resultatet.
Nu hvor du har gennemført Map, Filter, Reduce cyklussen, skal du gentage den samme cyklus på de lyse X-mærker på de røde og blå tæpper. På det røde tæppe skal du bruge listekonstanten vanilla, og oprette map2, filter2 og reduce2. På det blå tæppe skal du bruge listekonstanten chocolate, og oprette map3, filter3 og reduce3.
Gå til det sidste lyse X-mærke, som er over det lilla tæppe, tilføj reduce1, reduce2 og reduce3 for at samle hovedingredienserne af vanilla, strawberry og chocolate. Opret en variabel kaldet neapolitan og læg alle Reduce resultaterne sammen, som dette: neapolitan = reduce1+reduce2+reduce3. Brug speak() funktionen med kombinationen for at verificere den, og brug place() funktionen med den for at lave Neapolitan is og fuldføre niveauet.