Coding for KidsCoding for Kids
Kreativa NivåerUtmaningarLärarguide
Rösta på funktioner
Avancerad Pythonutvecklingskurs
Kapitel
>
Nivå

Avancerade funktioner
Slutna funktioner

Mål

Reglera vattenförsörjningen på gården genom att sätta upp och använda closures.

Det finns fyra vattentankar designade för att bevattna den omgivande jordbruksmarken, och det är dags att byta ut dem för att säkerställa att rätt mängd vatten fördelas till rätt platser. För att göra detta kan vi underlätta arbetet genom att använda closures.

Closures är inbäddade funktioner designade för att kapsla in data, vilket minskar antalet variabler du behöver använda och döljer datan inuti funktionen så att den inte kan manipuleras externt, med andra ord, den "stänger" funktionen.

För att reglera vattnet i tankarna kommer vi att skapa en inbäddad funktion som fungerar som en multiplikator. Denna funktion fungerar på samma sätt som en loop, där den yttre funktionen med namnet multiplier_of() har ett argument som multipliceras med argumentet från dess inre funktion med namnet multiplier().

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

När vi har satt upp detta behöver vi omsluta funktionen genom att skapa closures, detta förhindrar åtkomst till deras värden och säkerställer deras användning.

# 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]

Closuren ovan heter multiply_by_2() och använder den inbäddade funktion vi skapade med ett fast argument, nämligen 2, vilket är siffran som closuren är satt att multiplicera med. Som ett resultat kommer vilket tal vi än anger som argument att multipliceras med två (2) och denna egenskap kan inte ändras eftersom den är innesluten.

När det gäller att reglera vattentankarna, skapa tre (3) closures: multiply_by_2, multiply_by_3 och multiply_by_5. Sätt upp var och en manuellt med samma format som användes i exemplet tidigare, på följande sätt: multiply_by_2 = multiplier_of(2).

Det finns en konstant dictionary i denna nivå med namnet tanks, som som index innehåller sex (6) färger: "red", "blue", "orange", "purple", "yellow" och "green". Varje index håller ett nummer som representerar hur mycket vatten som flödar genom en tanks flank, detta nummer kommer att användas för att reglera tanken genom att använda de tidigare nämnda "multiply_by" closures.

För att underlätta detta kommer en funktion att sättas upp i editorn med namnet regulate_water(), den tar två argument: färgen som representerar de ovan nämnda indexen och multiplikatorn som representerar vilken multiplier closure som ska användas. Ett exempel på funktionen i användning är: regulate_water("red", multiply_by_2).

Gå mot de mörka X-märkena ovanför de färgade mattorna och möt tankarna, använd regulate_water()-funktionen och ange mattans färg som det första argumentet samt rätt multiplier closure som det andra. Multiplikatorerna att använda på varje färgad matta är följande:

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

Reglera vattnet på varje tanks flank för att slutföra nivån.

Kodbok