Coding for KidsCoding for Kids
Niveaux CréatifsDéfisGuide de l'Enseignant
Voter pour les fonctionnalités
Cours avancé de développement Python
Chapitre
>
Niveau

Décorateurs
Chaînage des décorateurs

Objectif

Décorez le toit avec des drapeaux colorés en chaînant les décorateurs.

Le toit bénéficie d'un peu d'air frais après avoir été enfermé dans cette cuisine pendant si longtemps, certaines lignes n'ont pas de drapeaux. Ce serait une bonne idée de les installer pendant que vous êtes ici, cependant cela peut être délicat étant donné que vous avez besoin de divers drapeaux pour disposer une ligne. Vous pouvez y parvenir en chaînant les décorateurs.

Les décorateurs sont chaînés en doublant les symboles @, c'est-à-dire en fixant plusieurs décorateurs à une seule fonction. Par exemple, cela vous permet d'encapsuler une fonction entre deux fonctions décoratrices:

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

Le code ci-dessus illustre une fonction à laquelle sont appliqués des décorateurs chaînés. Ces décorateurs sont intégrés dans la fonction de manière à ce que, sur les bords de la ligne, des drapeaux bleus soient placés, la couche intérieure comporte des drapeaux rouges et enfin, au centre, un drapeau vert est placé. Ils sont tous ajoutés à une liste nommée line. C'est la méthode qui sera utilisée pour disposer les drapeaux sur les lignes.

Commencez par vous rendre à la marque X dorée et utilisez la fonction read() pour vérifier les instructions inscrites sur le panneau. Vous y trouverez des informations sur l'emplacement où placer chaque drapeau, sachant qu'il existe trois (3) types différents de drapeaux colorés : "red", "green" et "blue". Chaque ligne comportera les trois drapeaux, un (1) au centre de la ligne, deux (2) sur la ligne intérieure et deux (2) sur la ligne extérieure, soit un total de cinq (5) drapeaux par ligne, à l'image de la ligne préfabriquée en bas à gauche de la carte.

Rendez-vous à la marque X claire et utilisez la fonction collect() pour récupérer les "flags" dans la caisse. Ensuite, rendez-vous aux marques X foncées et, de gauche à droite, commencez à disposer les drapeaux dans l'ordre décrit dans les instructions que vous avez lues précédemment. Utilisez les fonctions médianes pour y parvenir, par exemple : middle_green() crée une ligne de drapeaux comme celle-ci: ["blue", "red", "green" ,"red","blue" ]. Puis, utilisez la fonction place() pour placer la ligne en utilisant la liste line, comme ceci: place(line).

Entre chaque marque X, videz la liste line en utilisant la fonction clear(), comme ceci: line.clear(), cela vous permet de réutiliser la liste sans avoir à en créer une nouvelle pour chaque ligne. La dernière marque X à droite nécessite une fonction personnalisée:

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

Utilisez les deux symboles @ pour ajouter des décorateurs à la fonction, puis complétez l'ajout à la liste et la couleur du drapeau dans la chaîne de caractères. Faites cela conformément aux instructions sur le panneau afin de terminer le niveau.

Livre de Code