Coding for KidsCoding for Kids
Kreative NivåerUtfordringerLærerveiledning
Stem på funksjoner
Avansert Pythonutviklingskurs
Kapittel
>
Nivå

Dekoratorer
Kjeding av dekoratører

Mål

Pynt taket med fargede flagg ved å kjede dekoratører.

Taket har endelig fått litt frisk luft etter å ha vært innesperret på kjøkkenet så lenge, men noen av linjene har ikke flagg. Det hadde vært lurt å sette dem opp mens du er her, men det kan være vanskelig siden du trenger ulike flagg for å sette opp en linje. Du kan oppnå dette ved å kjede dekoratørene sammen.

Dekoratører kjedes sammen ved å doble @-tegnene, altså ved å feste flere dekoratører på en enkelt funksjon. For eksempel lar dette deg plassere en funksjon mellom to dekoratørfunksjoner:

# 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 ovenfor illustrerer en funksjon med kjedede dekoratører, der dekoratørene er integrert i funksjonen slik at blå flagg plasseres ytterst, røde flagg plasseres i det indre laget, og til slutt et grønt flagg settes i midten. Disse legges alle til i en liste kalt line, og denne metoden vil bli brukt for å sette opp flaggene på linjene.

Start med å gå til gull X-merket og bruk read()-funksjonen for å sjekke instruksjonene som står på skiltet. Her vil det stå hvilke flagg som skal plasseres hvor, med tre (3) forskjellige typer fargede flagg: "red", "green" og "blue". Hver linje vil ha alle de tre flaggene; ett (1) i midten av linjen, to (2) på den indre linjen og to (2) på den ytre linjen, noe som gir totalt fem (5) flagg per linje, på samme måte som den forhåndslagde linjen nederst til venstre på kartet.

Gå til det lyse X-merket og bruk collect()-funksjonen for å hente "flags" fra kassen. Deretter, gå til de mørke X-markene, og fra venstre til høyre, begynn å sette flaggene i den rekkefølgen som ble beskrevet i instruksjonene du leste tidligere. Bruk midtfuksjonene for dette, for eksempel: middle_green() oppretter en flagglinje slik: ["blue", "red", "green" ,"red","blue" ]. Bruk deretter place()-funksjonen for å sette linjen med line-listen, slik: place(line).

Mellom hvert X-merke, tøm line-listen ved å bruke clear()-funksjonen, slik: line.clear(). Dette lar deg gjenbruke listen uten å måtte lage en ny for hver linje. Det siste X-merket til høyre krever en egendefinert funksjon:

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

Bruk de to @-symbolene for å legge til dekoratører til funksjonen, og fyll deretter ut line.append og fargen på flagget i strengen. Gjør dette i henhold til instruksjonene på skiltet for å fullføre nivået.

Kodebok