Cours avancé de développement Python
Chapitre
>
Niveau
Générateurs
Envoi de données à un générateur
Objectif
Recueillir de la laine et la filer en fil à l'aide des fuseaux en envoyant des données dans un générateur.
Certaines des moutons sont devenus un peu trop laineux, il serait préférable de les tondre et de récupérer leur laine. Vous pouvez ensuite passer la laine à travers un fuseau afin de produire du fil. Pour ce faire, nous devons utiliser un générateur, car les quantités de fil et de laine traitées peuvent varier considérablement.
Commencez par définir un générateur capable de filer du fil, en le nommant spin(). Ce générateur doit être configuré pour utiliser des entrées externes pour fonctionner. Il lit les données de yield et les place dans une variable, puis modifie son contenu en augmentant sa longueur à chaque cycle, pour finalement produire un résultat.
def spin():
cycle = 1
while True:
cycle += 1
yarn = yield
yarn = yarn * cycle
yield player.speak("You've spun %d ft of yarn" % (yarn))
Parce qu'il s'agit d'un générateur, l'instruction while() à l'intérieur peut être mise en pause et modifiée pour produire la sortie que nous souhaitons. Ce niveau de contrôle est au cœur de ce qu'est un générateur et comment il peut être utile lors du traitement des données. Pour insérer des données dans le générateur, définissez-le et utilisez la fonction send() pour lui transmettre les données que vous désirez, par exemple:
spindle = spin() # Créez une instance du générateur next(spindle) # Exécutez le générateur d'un seul pas spindle.send(6) # Insérer des données dans le générateur # Dans ce cas, vous lui envoyez le nombre 6
Marchez vers le X marqué par les tapis colorés et faites face aux moutons. Il y a une constante de dictionnaire nommée sheep qui contient la valeur de combien de laine vous pouvez tondre sur chaque mouton. Utilisez la fonction speak() avec le dictionnaire et la couleur du tapis sur lequel vous vous tenez, pour tondre la laine du mouton et vérifier combien vous avez recueilli. Par exemple: player.speak(sheep["green"]).
Il y a quatre (4) tapis colorés au total: "green", "red", "blue" et "orange". Une fois que vous avez tondu les moutons, marchez jusqu'au X sombre marqué par chaque tapis coloré où les fuseaux sont situés. Utilisez send() pour entrer le nombre de livres de laine tondue de chaque mouton de leur couleur respective dans le générateur.
Par exemple, si en tondant les moutons sur le tapis "green", vous tondez 4 livres de laine, allez au tapis "green" près des fuseaux et envoyez ces données au générateur, comme ceci:
next(spindle) spindle.send(4)
Faites cela pour les quatre (4) X sombres marqués sur les tapis colorés afin de compléter le niveau.