Coding for KidsCoding for Kids
Kreative NivåerUtfordringerLærerveiledning
Stem på funksjoner
Avansert Pythonutviklingskurs
Kapittel
>
Nivå

Avanserte lister
Kart, Filtrer, Reduser

Målsetting

Fullfør blanding og produksjon av iskrem ved å bruke Map, Filter og Reduce.

Noen av iskrem-smakene er lave eller tomme, men vi har nok materialer til å kompensere og sette sammen mer iskrem. For å gjøre dette må du bruke Map, et kraftig verktøy som lar deg minimere mengden kode du trenger å skrive ved å komprimere løkker og forgreninger. Filter- og Reduce-funksjonene er komplementære til Map-funksjonen og gir en ettertrengt allsidighet til koden din.

For å starte må du importere Reduce fra functools-biblioteket for å kunne bruke funksjonen ved å legge til denne koden i begynnelsen av programmet ditt: from functools import reduce. Map- og Filter-funksjonene er innebygd i Python og trenger ikke å importeres.

Først må du hente noen ingredienser fra walk-in fryseren, gå til den gylne X-merkingen, vend deg mot døren og åpne den ved å bruke open()-funksjonen. Hent alle glassene med "cream" i fryseren, og gå deretter til den lyse X-merkingen over det grønne teppet.

Det finnes tre (3) listekonstanter på området som heter: vanilla, strawberry og chocolate. Hver konstant har en kombinasjon av ingredienser som utgjør iskrem-smaken. Ved den grønne X-merkingen, verifiser innholdet i strawberry-listekonstanten. Bruk først place()-funksjonen for å avlevere den "cream" du tidligere hentet, og bruk speak()-funksjonen for å verifisere innholdet i strawberry-listen.

Når det er verifisert, er det på tide å bruke Map-funksjonen med strawberry-listekonstanten. Innholdet i listen er alle desimaltall. Ved å bruke map()-funksjonen kan du runde av alle elementene i en liste, og dermed slippe å iterere gjennom hvert element i en løkke for å runde av ett om gangen. For å gjøre dette, opprett en liste kalt map1 og bruk map()-funksjonen sammen med strawberry-listen og round()-funksjonen, slik: map1 = list(map(round, strawberry)). Når det er gjort, bruk speak()-funksjonen med map1 for å verifisere resultatet.

Når dette er gjort, går vi videre til Filter. Dette fungerer i samme ånd som Map, men krever en funksjon som skal brukes i kombinasjon. Øverst i editoren vil du ha en forhåndsdefinert funksjon kalt main_ingredients som brukes for å avgjøre om en verdi er høyere enn tallet 25.

def main_ingredients(value): return value > 25

I stedet for å gå gjennom en løkke, kan du bruke denne funksjonen sammen med filter()-funksjonen for å sette sammen en ny liste med elementer som er over 25, som er hovedingrediensene. Opprett en ny liste kalt filter1 og bruk filter()-funksjonen med main_ingredients og map1 for å finne alle hovedingrediensene i Map-listen du opprettet, slik: filter1 = list(filter(main_ingredients, value)). Når det er gjort, bruk speak()-funksjonen med filter1 for å verifisere resultatet.

Nå går vi videre til Reduce, som brukes på samme måte som Filter, men her kan du bruke den til å sammenfatte eller redusere en liste til en enkelt enhet. I likhet med Filter, bruker den en egendefinert funksjon, denne gangen kalt custom_sum som dynamisk legger sammen to tall.

def custom_sum(first, second): return first + second

Opprett en variabel kalt reduce1 og bruk reduce()-funksjonen sammen med custom_sum-funksjonen og filter1 for å konsolidere alle elementene til en enkelt enhet, slik: reduce1 = reduce(custom_sum, filter1). Når det er gjort, bruk speak()-funksjonen med reduce1 for å verifisere resultatet.

Nå som du har fullført Map, Filter, Reduce-syklusen, gjenta den samme syklusen ved de lyse X-merkene på de røde og blå teppene. På det røde teppet bruker du listekonstanten vanilla, og oppretter map2, filter2 og reduce2. På det blå teppet bruker du listekonstanten chocolate, og oppretter map3, filter3 og reduce3.

Gå til den siste lyse X-merkingen som er over det lilla teppet, legg sammen reduce1, reduce2 og reduce3, og kombiner hovedingrediensene til vanilla, strawberry og chocolate. Opprett en variabel kalt neapolitan og legg sammen alle Reduce-resultatene, slik: neapolitan = reduce1+reduce2+reduce3. Bruk speak()-funksjonen med kombinasjonen for å verifisere den, og bruk place()-funksjonen med den for å lage Neapolitan-iskrem og fullføre nivået.

Kodebok