Coding for KidsCoding for Kids
Luovat TasotHaasteetOpettajan Opas
Äänestä ominaisuuksia
Edistynyt Python-kehityskurssi
Luku
>
Taso

Dekoraattorit
Monimutkaisempia dekoraattoreita

Tavoite

Aseta pizzat uuniin oikeisiin lämpötiloihin ja valmistele salaatit käyttämällä argumenttien kanssa toimivia koristelijoita.

Nyt kun pizzat ovat jo valmisteltu, on aika paistaa ne uuneissa; kun tämä on hoidettu, meidän tulisi valmistaa salaatit tarjoiltavaksi pizzan kanssa sen jälkeen, kun ne ovat valmiita. Voit suorittaa nämä tehtävät käyttämällä argumenttien kanssa toimivia koristelijoita. Samoin kuin mukautetuissa funktioissa, voit myös siirtää argumentteja koristelijoidesi kautta.

Pizzat täytyy asettaa uuniin, mutta ensin sinun täytyy kerätä lisää firewood-materiaalia kartan vasemmasta alakulmasta. Kun se on kerätty, hae kori tiskiltä vasemman uunin vierestä; tässä korissa on pizza, joka paistetaan uuneissa.

Koodieditorissa on määritelty funktio ja sen dekorori. Funktiota käytetään pizzan asettamiseen ja paistamiseen uunissa, ja dekorori tarkistaa, onko uunin lämpötila oikea. Jos lämpötila ei ole riittävä, asetetaan sen sijaan firewood.

def place_oven(func): def check(temp): if temp < 450: player.speak("Oven is not hot enough") player.open() player.place("firewood") player.close() return return func(temp) return check @place_oven def bake_pizza(temp): player.open() player.place("pizza") player.close() player.speak("I am baking Pizza at %d degrees" % (temp))

Kävele valojen X-merkkien luo ja käytä read()-funktiota, kun olet uunin edessä, tunnistaaksesi uunin lämpötilan. Jatka kirjoittamalla koristeltu funktio bake_pizza() ja lisää siihen lukemasi lämpötila argumenttina, esimerkiksi: bake_pizza(450).

Samaan aikaan, kun asetat pizzat ja firewood-materiaalin uuneihin, pysähdy kultaisen X-merkin kohdalle ja käänny kohti kaappia; täältä voit kerätä ainekset salaattien kokoamiseen. Tällä hetkellä salaattiainekset on tallennettu sisäkkäiseen listaan, joka on esitetty koodieditorissa, mutta tämä lista on sekava ja on parasta tallentaa ainekset kunnolliseen listaan, jotta voit käyttää niitä salaatteihin.

cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]

Luo lista nimeltä ingredients ja käytä listan ymmärtämistä (List Comprehension) "litistääksesi" sisäkkäisen listan. Tämä on prosessi, jossa poistetaan sisäkkäiset listat, niin että kaikki ainekset ovat yhdessä listassa sen sijaan, että ne olisivat useissa pienemmissä listoissa. Kun lista on litistetty, käytä speak()-funktiota listan kanssa varmistaaksesi, että käytät oikeita ainesosia.

Kun kaikki tarvittavat ainekset on asetettu uuneihin ja ingredients-lista on käsitelty, kävele pimeiden X-merkkien luo luodaksesi salaatteja. Koodieditorissa on määritelty funktio ja dekorori, mutta tällä kertaa ne eivät ole yhdistettyjä ja ne täytyy määritellä manuaalisesti, esimerkiksi: salad = add_toppings(toss_salad("ranch","carrot")). Tämä funktiokokonaisuus ottaa kaksi (2) argumenttia: dressing ja vegetable.

def add_toppings(func): def add(dressing, vegetable): player.place(dressing) player.place(vegetable) func(dressing, vegetable) return add @add_toppings def toss_salad(dressing, vegetable): player.combine("lettuce", dressing, vegetable) player.speak("I am preparing salad with %s dressing and %s" % (dressing, vegetable))

Jokainen pimeä X-merkki sijaitsee värillisellä matolla, ja jokaisella on oma salaattinsa, joka täytyy koota käyttäen kaapista keräämiäsi aineksia. Keltaisella matolla kokoa salaatti käyttäen: cesar ja cheese, vihreällä matolla kokoa salaatti käyttäen: oil ja tomato, ja sinisellä matolla kokoa salaatti käyttäen: ranch ja carrot.

Kun kaikki kolme (3) salaattia on koottu käyttämällä koristeltua funktiota toss_salad(dressing, vegetable) tässä muodossa, taso on suoritettu.

Koodikirja