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

Dekoratörer
Kedja dekoratörer

Mål

Dekorera taket med färgade flaggor genom att kedja dekoratörer.

Taket får lite frisk luft efter att ha varit instängt i köket så länge, och vissa rader har inte flaggor. Det vore en bra idé att sätta upp dem medan du är här, men det kan vara knepigt eftersom du behöver olika flaggor för att sätta ihop en rad. Du kan åstadkomma detta genom att kedja dekoratörer.

Dekoratörerna kedjas genom att dubbla @-tecknen, det vill säga att fästa flera dekoratörer på en enda funktion. Till exempel möjliggör detta att du kan placera en funktion mellan två dekoratörfunktioner:

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

Koden ovan illustrerar en funktion med kedjade dekoratörer fästa, där dessa dekoratörer är vävda in i funktionen så att blå flaggor placeras i radens kanter, den inre lagret får röda flaggor och slutligen placeras en grön flagga i mitten. Alla läggs till i en lista som heter line, detta är metoden som kommer att användas för att sätta upp flaggorna på raderna.

Börja med att gå till den gyllene X-markeringen och använd funktionen read() för att läsa instruktionerna som står på skyltens stolpe. Här får du veta vilka flaggor som ska placeras var, med tre (3) olika typer av färgade flaggor: "red", "green" och "blue". Varje rad kommer att ha alla tre flaggorna, en (1) i mitten av raden, två (2) i den inre raden och två (2) i den yttre raden, vilket blir totalt fem (5) flaggor per rad, precis som den förberedda raden vid den nedre vänstra sidan av kartan.

Gå till den ljusa X-markeringen och använd funktionen collect() för att hämta "flags" från lådan. Fortsätt sedan med att gå till de mörka X-markeringarna och, från vänster till höger, börja placera flaggorna i den ordning som beskrevs i de instruktioner du läste tidigare. Använd mittfunktionerna för att åstadkomma detta, till exempel: middle_green() skapar en flaggrad som denna: ["blue", "red", "green" ,"red","blue" ]. Använd därefter funktionen place() för att sätta raden med hjälp av listan line, så här: place(line).

Mellan varje X-markering töm listan line med funktionen clear(), så här: line.clear(), detta gör att du kan återanvända listan utan att behöva skapa en ny för varje rad. Den sista X-markeringen till höger kräver en anpassad funktion:

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

Använd de två @-symbolerna för att lägga till dekoratörer på funktionen, fyll därefter i line.append och flaggans färg i strängen. Gör detta i enlighet med instruktionerna på skylten för att slutföra nivån.

Kodbok