Coding for KidsCoding for Kids
Creatieve LevelsUitdagingenLerarengids
Stem op functies
Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau

Decorators
Complexere Decorators

Doelstelling

Zet pizza's in de oven op de juiste temperaturen en bereid salades voor door decorateurs met argumenten te gebruiken.

Nu de pizza's al zijn voorbereid, is het tijd om ze in de ovens te bakken. Zodra dat is geregeld, moeten we salades bereiden om bij de pizza's te serveren nadat ze klaar zijn. Je kunt deze taken voltooien door decorateurs met argumenten te gebruiken; net zoals bij custom functies kun je ook argumenten doorgeven via je decorateurs.

De pizza's moeten in de oven geplaatst worden, maar eerst moet je meer firewood verzamelen in de linkeronderhoek van de kaart. Nadat je dit hebt verzameld, verzamel je de mand bij de toonbank naast de linkeroven; deze mand bevat pizza die in de ovens gebakken moet worden.

Er is een functie en de decorator ervan zijn al ingesteld in de code-editor. De functie wordt gebruikt om de pizza in de oven te plaatsen en te bakken, en de decorator controleert of de oven op de juiste temperatuur is. Als dat niet het geval is, wordt in plaats daarvan firewood geplaatst.

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

Loop naar de lichte X-markeringen en gebruik de read() functie terwijl je naar de oven kijkt, om de temperatuur van de oven te bepalen. Ga hier vervolgens mee verder door de gedecoreerde functie bake_pizza() te schrijven en de temperatuur die je hebt afgelezen als argument door te geven, bijvoorbeeld: bake_pizza(450).

Terwijl je de pizza's en het brandhout in de ovens plaatst, stop je bij de gouden X-markering en richt je op de kast. Hier kun je de ingrediënten verzamelen om salades samen te stellen. Momenteel zijn de salade-ingrediënten opgeslagen in een geneste lijst die in de code-editor wordt weergegeven, maar deze lijst is rommelig. Het is in jouw belang om de items in een nette lijst op te slaan zodat je ze kunt gebruiken voor je salades.

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

Maak een lijst met de naam ingredients en gebruik List Comprehension om de geneste lijst te "flattenen". Dit is het proces waarbij de sublijsten uit de geneste lijst worden verwijderd, zodat alle items nu samen in één lijst staan in plaats van verspreid over meerdere kleinere lijsten. Nadat de lijst is flattened, gebruik je de speak() functie met de lijst om de ingrediënten die je gaat gebruiken te verifiëren.

Nadat alle benodigde items in de ovens zijn geplaatst en de ingredients lijst is behandeld, loop je naar de donkere X-markeringen om de salades te maken. In de editor staat een functie en een decorator, maar deze zijn deze keer niet gekoppeld en moeten handmatig worden gedeclareerd, bijvoorbeeld: salad = add_toppings(toss_salad("ranch","carrot")). Deze functies nemen twee (2) argumenten: dressing en 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))

Elke donkere X-markering bevindt zich op een gekleurd tapijt. Op elk tapijt moet een andere salade worden gemaakt met de ingrediënten die je uit de kast hebt gepakt. Op het gele tapijt maak je een salade met: cesar en cheese, op het groene tapijt maak je een salade met: oil en tomato, en op het blauwe tapijt maak je een salade met: ranch en carrot.

Zodra alle drie (3) salades zijn samengesteld met behulp van de gedecoreerde functie toss_salad(dressing, vegetable) volgens dit formaat, is het level voltooid.

Codeboek