Coding for KidsCoding for Kids
Kreativní ÚrovněVýzvyPrůvodce pro Učitele
Hlasovat pro funkce
Pokročilý kurz vývoje v Pythonu
Kapitola
>
Úroveň

Dekorátory
Řetězení dekorátorů

Cíl

Ozdobte střechu barevnými vlajkami řetězením dekorátorů.

Střecha si dopřála čerstvý vzduch poté, co byla tak dlouho zavřená v té kuchyni, a některé linie nemají vlajky. Bylo by dobré je nastavit, zatímco jste tady, ale může to být náročné, protože potřebujete různé vlajky k vytvoření jedné linie. Toho dosáhnete řetězením dekorátorů.

Dekorátory se řetězí zdvojením znaků @, tj. přiřazením více dekorátorů k jedné funkci. Například to umožňuje vložit funkci mezi dvě dekorátorské funkce:

# 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")

Výše uvedený kód ilustruje funkci s připojenými řetězenými dekorátory, kdy jsou dekorátory vloženy do funkce tak, že na okrajích linie se umístí modré vlajky, vnitřní vrstva obsahuje červené vlajky a nakonec uprostřed je umístěna zelená vlajka. Všechny jsou přidány do seznamu nazvaného line, což je metoda, která se použije k nastavení vlajek na liniích.

Začněte tak, že se vydáte ke zlaté značce X a pomocí funkce read() si přečtete pokyny uvedené na ceduli. Zde se dozvíte, jaké vlajky kam umístit, přičemž existují tři (3) různé typy barevných vlajek: "red", "green" a "blue". Každá linie bude mít všechny tři vlajky, jednu (1) uprostřed linie, dvě (2) uvnitř linie a dvě (2) na vnější straně, což dává celkem pět (5) vlajek na linii, podobně jako předpřipravená linie v levém dolním rohu mapy.

Vydejte se ke světlé značce X a použijte funkci collect() k sebrání "flags" z bedny. Poté se vydejte k tmavým značkám X a zleva doprava začněte umisťovat vlajky v pořadí, jaké bylo popsáno v pokynech, které jste si předtím přečetli. K dosažení tohoto použijte odpovídající prostřední funkce, například: middle_green() vytvoří řadu vlajek takto: ["blue", "red", "green" ,"red","blue" ]. Následně použijte funkci place() k nastavení linie pomocí seznamu line, takto: place(line).

Mezi každou značkou X vyčistěte seznam line pomocí funkce clear(), například: line.clear(). Tímto způsobem můžete znovu použít tento seznam, aniž byste museli vytvářet nový pro každou linii. Poslední značka X napravo vyžaduje vlastní funkci:

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

Použijte dva symboly @ k přidání dekorátorů do funkce, poté vyplňte příkaz line.append a barvu vlajky ve stringu. Postupujte podle pokynů na ceduli, abyste úroveň dokončili.

Kniha Kódu