Cours avancé de développement Python
Chapitre
>
Niveau
Décorateurs
Des décorateurs plus complexes
Objectif
Mettre les pizzas dans le four à la bonne température et préparer des salades en utilisant des décorateurs avec arguments.
Maintenant que les pizzas sont déjà prêtes, il est temps de les cuire dans les fours. Une fois cela fait, nous devons préparer des salades pour accompagner les pizzas une fois qu'elles sont cuites. Vous pouvez accomplir ces tâches en utilisant des décorateurs avec arguments ; de la même manière que pour les fonctions personnalisées, vous pouvez également passer des arguments à travers vos décorateurs.
Les pizzas doivent être placées dans le four, mais d'abord vous devez récupérer plus de firewood en bas à gauche de la carte. Une fois récupéré, prenez le panier sur le comptoir près du four de gauche, ce panier contient la pizza à cuire dans les fours.
Une fonction et son décorateur sont configurés dans l'éditeur de code. La fonction est utilisée pour placer et cuire la pizza dans le four, et le décorateur vérifie si le four est à la bonne température. Si la température n'est pas correcte, firewood est placé à la place.
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))
Marchez jusqu'aux marques X claires et utilisez la fonction read() en faisant face au four, pour identifier la température du four. Ensuite, écrivez la fonction décorée bake_pizza() et ajoutez la température que vous avez relevée en argument, par exemple : bake_pizza(450).
Pendant que vous placez les pizzas et le bois de chauffage dans les fours, arrêtez-vous à la marque X dorée et faites face au placard. Ici, vous pouvez récupérer les ingrédients pour préparer des salades. Actuellement, les ingrédients de la salade sont stockés dans une liste imbriquée telle qu'énoncée dans l'éditeur de code. Cependant, cette liste est désordonnée et il serait préférable de stocker les éléments dans une liste propre afin de les utiliser pour vos salades.
cabinet = [["lettuce"], ["carrot" ,"tomato"] , ["oil" , "ranch", "cesar"] , ["cheese"]] ingredients = [item for sublist in cabinet for item in sublist]
Créez une liste nommée ingredients et utilisez une compréhension de liste pour « aplatir » la liste imbriquée. Il s'agit du processus consistant à supprimer les sous-listes de la liste imbriquée afin que tous les éléments se retrouvent ensemble dans une seule liste plutôt que dans plusieurs petites listes. Une fois la liste aplatie, utilisez la fonction speak() avec la liste pour vérifier les ingrédients que vous allez utiliser.
Après que tous les éléments nécessaires ont été placés dans les fours et que la liste ingredients a été traitée, marchez jusqu'aux marques X foncées pour créer les salades. Dans l'éditeur, une fonction et un décorateur sont configurés. Cette fois, ils ne sont pas connectés et doivent être déclarés manuellement, par exemple : salad = add_toppings(toss_salad("ranch","carrot")). Cet ensemble de fonctions prend deux (2) arguments : dressing et 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))
Chaque marque X foncée est située sur un tapis de couleur. Chacune correspond à une salade différente à préparer en utilisant les ingrédients récupérés dans le placard. Sur le tapis jaune, préparez une salade en utilisant : cesar et cheese ; sur le tapis vert, préparez une salade en utilisant : oil et tomato ; sur le tapis bleu, préparez une salade en utilisant : ranch et carrot.
Une fois que les trois (3) salades sont composées en utilisant la fonction décorée toss_salad(dressing, vegetable) dans ce format, le niveau sera terminé.