Coding for KidsCoding for Kids
Creatieve LevelsUitdagingenLerarengids
Stem op functies
Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

Gevorderde Functies
Sluitingen

Doel

Reguleer de watervoorziening op de boerderij door closures op te zetten en te gebruiken.

Er zijn vier watertanks ontworpen om het omliggende land te irrigeren, het wordt tijd dat ze worden omgeschakeld om ervoor te zorgen dat de juiste hoeveelheid water op de juiste plaatsen wordt verdeeld. Om dit te doen kunnen we de taak aanzienlijk vereenvoudigen door gebruik te maken van closures.

Closures zijn geneste functies die zijn ontworpen om data in te kapselen, wat het aantal variabelen dat je moet gebruiken vermindert en de data binnen de functie verbergt zodat deze niet extern kan worden gemanipuleerd, met andere woorden, de functie wordt afgesloten.

Om het water in de tanks te reguleren maken we een geneste functie die als vermenigvuldiger fungeert. Deze functie werkt op dezelfde manier als een lus; de buitenste functie genaamd multiplier_of() heeft een argument dat wordt vermenigvuldigd met het argument van de binnenste functie genaamd multiplier().

# Nested Function def multiplier_of(n): def multiplier(number): return number*n return multiplier

Zodra dit is opgezet, moeten we de functie afsluiten door closures in te stellen, waardoor toegang tot hun waarden wordt voorkomen en hun gebruik wordt gefixeerd.

# Set up Closure that multiplies any number by 2 multiply_by_2 = multiplier_of(2) # Uses closure to display a number on screen player.speak( multiply_by_2(4) ) # The number displayed is 8, the formula is [2 x 4 = 8]

De bovenstaande closure heet multiply_by_2() en maakt gebruik van de geneste functie die we hebben gemaakt met een vast argument, namelijk 2, wat het getal is waarmee de closure is ingesteld om te vermenigvuldigen. Als resultaat wordt elk getal dat als argument wordt toegevoegd vermenigvuldigd met twee (2) en dit attribuut kan niet worden gewijzigd omdat het is afgesloten.

Ga verder met het reguleren van de watertanks, stel drie (3) closures in: multiply_by_2, multiply_by_3 en multiply_by_5. Stel elk van hen handmatig in met behulp van hetzelfde format dat eerder in het voorbeeld is gebruikt, zoals dit: multiply_by_2 = multiplier_of(2).

Er is een constante woordenboek in dit level genaamd tanks. Als index bevat het zes (6) kleuren: "red", "blue", "orange", "purple", "yellow" en "green". Elke index bevat een getal dat aangeeft hoeveel water er door een tankwand stroomt; dit getal wordt gebruikt om de tank te reguleren door gebruik te maken van de eerder besproken "multiply_by" closures.

Om dit te vergemakkelijken wordt in de editor een functie opgezet genaamd regulate_water(). Deze neemt twee argumenten: de kleur, die de hierboven beschreven indexen vertegenwoordigt, en de vermenigvuldigings-closure die moet worden gebruikt. Een voorbeeld van het gebruik van de functie is als volgt: regulate_water("red", multiply_by_2).

Loop naar de donkere X-markeringen boven gekleurde tapijten en begeef je naar de tanks, gebruik de regulate_water() functie en stel de kleur van het tapijt in als het eerste argument en de juiste vermenigvuldigings-closure als het tweede. De vermenigvuldigers die voor elk gekleurd tapijt moeten worden gebruikt, zijn als volgt:

multiply_by_2 - "red" en "green" multiply_by_3 - "blue" en "purple" multiply_by_5 - "orange" en "yellow"

Reguleer het water aan elke kant van de tank om het level te voltooien.

Codeboek