Coding for KidsCoding for Kids
Креативни НиваПредизвикателстваРъководство за Учители
Гласувайте за функции
Курс по усъвършенствано разработване с Python
Глава
>
Ниво

Разширени функции
Затварящи функции

Цел

Регулирайте водоснабдяването във фермата чрез настройване и използване на затваряния.

Има четири водни резервоара, предназначени за напояване на заобикалящите земеделски земи, и е време те да бъдат пренаредени, за да се уверим, че правилното количество вода се разпределя на правилните места. За да улесним това, можем да използваме затваряния.

Затварянията са вложени функции, предназначени да инкапсулират данни, което намалява броя на променливите, които трябва да се използват, и крие данните вътре във функцията, така че те да не могат да бъдат манипулирани отвън - с други думи, затварят функцията.

За да регулираме водата в резервоарите, ще създадем вложена функция, която работи като множител. Тази функция работи по същия начин като цикъл, външната функция с име multiplier_of() има аргумент, който се умножава по аргумента на нейната вътрешна функция с име multiplier().

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

След като е настроена, трябва да обградим функцията чрез създаване на затваряния, което предотвратява достъпа до нейните стойности и утвърждава тяхната употреба.

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

Горното затваряне е с име multiply_by_2() и използва вложената функция, която създадохме със зададен аргумент, а именно 2, което е числото, с което затварянето е настроено да умножава. В резултат на това, всяко число, което добавим като аргумент, ще бъде умножено по две (2) и този атрибут не може да се промени, тъй като е затворен.

Преминавайки към регулирането на водните резервоари, настройте три (3) затваряния: multiply_by_2, multiply_by_3 и multiply_by_5. Ръчно ги настройте, като използвате същия формат, използван в примера по-горе, по следния начин: multiply_by_2 = multiplier_of(2).

В тази стъпка има константен речник с име tanks, който като индекси съдържа шест (6) цвята: "red", "blue", "orange", "purple", "yellow" и "green". Всеки индекс държи число, което представя колко вода тече през фланга на резервоара, а това число ще се използва за регулиране на резервоара чрез използване на предварително обсъдените затваряния "multiply_by".

За да улесним това, в редактора ще бъде настроена функция с име regulate_water(), която приема два аргумента: цвета, който представлява горепосочените индекси, и множителя, който представлява затварянето за умножение, което да се използва. Пример за използване на функцията е следния: regulate_water("red", multiply_by_2).

Отидете до тъмните X, маркирани над цветните килими, и се изправете пред резервоарите, използвайте функцията regulate_water() и задайте цвета на килима като първи аргумент и подходящото затваряне за умножение като втори. Множителите, които трябва да се използват за всеки цветен килим са следните:

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

Регулирайте водата на фланговете на всеки от резервоарите, за да завършите изпита.

Книга с Код