Coding for KidsCoding for Kids
Niveluri CreativeProvocăriGhid pentru Profesori
Votează pentru funcții
Curs Avansat de Dezvoltare Python
Capitolul
>
Nivel

Funcții Avansate
Închideri

Obiectiv

Reglează alimentarea cu apă în fermă prin configurarea și utilizarea închiderilor (closures).

Există patru rezervoare de apă destinate irigației suprafeței agricole din jur; a venit momentul să fie reglate astfel încât să se asigure distribuirea cantității corecte de apă în locurile potrivite. Pentru a face acest lucru, putem simplifica mult munca utilizând închideri (closures).

Închiderile (closures) sunt funcții imbricate concepute pentru a encapsula datele; acest lucru reduce numărul de variabile pe care trebuie să le folosești și ascunde datele în interiorul funcției, împiedicând astfel manipularea lor din exterior, adică închiderea funcției.

Pentru a regla apa din rezervoare, vom crea o funcție imbricată care funcționează ca un multiplicator. Această funcție funcționează similar cu o buclă; funcția exterioară, denumită multiplier_of(), are un argument care este multiplicat cu argumentul funcției sale interioare, denumită multiplier().

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

Odată configurată, trebuie să închidem funcția prin setarea închiderilor, ceea ce previne accesul la valorile lor și le fixează modul de utilizare.

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

Închiderea de mai sus este denumită multiply_by_2() și folosește funcția imbricată pe care am creat-o cu un argument setat, și anume 2, care este numărul cu care închiderea este configurată să multiplice. Drept urmare, orice număr pe care îl adăugăm ca argument va fi multiplicat cu doi (2) și această atribuție nu poate fi modificată datorită închiderii.

Trecând la reglarea rezervoarelor de apă, configurează trei (3) închideri: multiply_by_2, multiply_by_3 și multiply_by_5. Configurează-le manual folosind același format folosit în exemplul precedent, astfel: multiply_by_2 = multiplier_of(2).

Există o constantă de tip dicționar în acest nivel, denumită tanks, care, ca index, conține șase (6) culori: “red", “blue", “orange", “purple", “yellow" și “green". Fiecare index deține un număr care reprezintă cantitatea de apă ce curge printr-o parte a rezervorului; acest număr va fi utilizat pentru a regla rezervorul folosind închiderile de tip „multiply_by” discutate anterior.

Pentru a facilita acest lucru, va fi configurată în editor o funcție denumită regulate_water(), care primește două argumente: culoarea, care reprezintă indexurile menționate mai sus, și multiplicatorul, care reprezintă închiderea de multiplicare de utilizat. Un exemplu de utilizare a funcției este următorul: regulate_water(“red" , multiply_by_2 ).

Mergi spre semnele X întunecate de deasupra covoarelor colorate și înfruntă rezervoarele; folosește funcția regulate_water() și setează culoarea covorului ca prim argument și închiderea de multiplicare corespunzătoare ca al doilea. Multiplicatoarele care trebuie utilizate pentru fiecare covor colorat sunt următoarele:

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

Reglează apa pe fiecare parte a rezervorului pentru a finaliza nivelul.

Carte de Cod