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

Декоратори
Свързване на декоратори

Цел

Украсете покрива с оцветени знаменца чрез свързване на декоратори.

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

Декораторите се свързват чрез удвояване на знаците @, тоест, прикачване на няколко декоратора към една функция. Например, това позволява да „запечатате“ една функция между две декоратор-функции:

# List to add flags to a line line = [] # Decorator adding a red flag def red_flag(func): def add_flag(): line.append("red") player.speak("Two red flags added to the line") func() line.append("red") return add_flag # Decorator adding a blue flag def blue_flag(func): def add_flag(): line.append("blue") player.speak("Two blue flags added to the line") func() line.append("blue") return add_flag # Decorated Function adding line and middle flag @blue_flag @red_flag def middle_green(): line.append("green") player.speak("A green flag has been added to the line")

Кодът по-горе илюстрира функция с прикачени верижно декоратори. Тези декоратори се вплитат във функцията така, че по краищата на линията да се поставят сини знаменца, вътрешният слой да се украсява с червени знаменца, а в средата да се поставя зелено знаме. Всички те се добавят към списък с име line, който представлява метода за поставяне на знаменцата по линиите.

Започнете, като се придвижите до златната X-маркировка и използвате функцията read(), за да проверите инструкциите, изложени на пътния знак. Там ще ви бъде казано кои знаменца къде да поставите, като има три (3) различни вида оцветени знаменца: "red", "green" и "blue". Във всяка линия ще има всички три знаменца – едно (1) в средата на линията, две (2) в вътрешната линия и две (2) в външната линия, което прави общо пет (5) знаменца на линия, както при предварително зададената линия в долния ляв ъгъл на картата.

Отидете до светлата X-маркировка и използвайте функцията collect(), за да вземете знаменцата, намиращи се в кашона. След това се придвижете към тъмните X-маркировки и отляво надясно започнете да поставяте знаменцата в реда, описан в инструкциите, които прочетохте по-рано. Използвайте съответните функции за средната част, за да постигнете това, например: middle_green() създава линия от знаменца, както следва: ["blue", "red", "green" ,"red","blue" ]. След това използвайте функцията place(), за да поставите линията, използвайки списъка line, както следва: place(line).

Между всяка X-маркировка изчистете списъка line, като използвате функцията clear(), както следва: line.clear(). Това ви позволява да използвате списъка отново, без необходимостта да създавате нов за всяка линия. Последната X-маркировка отдясно изисква специална функция:

@ @ def middle_custom(): line.append( Insert append ) player.speak("%s flag has been added to the line" % ( insert flag ))

Използвайте двата символа @, за да добавите декоратори към функцията, и след това попълнете 'line.append' и цвета на знаменцето в низа. Направете това в съответствие с инструкциите на знака, за да завършите нивото.

Книга с Код