Cours avancé de développement Python
Chapitre
>
Niveau
Gestion des exceptions
Clause sinon
Objectif
Prenez les matériaux de réparation et triez-les, puis éliminez les déchets indésirables en utilisant la clause else avec la gestion des exceptions.
Certains matériaux de réparation ont été stockés en haut de l'immeuble ; ils servent à réparer le toit après des tempêtes ou en raison de l'usure générale. Certains ont été récemment livrés et sont encore conservés dans des emballages et des conteneurs, d'autres ont été stockés pendant très longtemps et ont été entassés avec des ordures. Il serait judicieux de trier les matériaux, de les stocker correctement et d'éliminer les ordures et les déchets.
En raison de la nature désorganisée des matériaux, il est probable que vous rencontriez des erreurs. Vous pouvez y remédier en utilisant le bloc de code try / except, mais cela peut être un peu délicat si vous n'êtes pas familier avec les erreurs auxquelles vous pourriez faire face. Cependant, vous pouvez étendre vos outils de gestion des exceptions en ajoutant la clause else. Cela vous permet d'exécuter du code si le bloc except n'est pas déclenché, ce qui permet de simplifier votre code et est particulièrement adapté pour identifier et corriger les erreurs.
Pour commencer, vous devez entrer dans la salle de stockage de gauche et vous diriger vers la marque X claire. Cette salle stocke des bardeaux utilisés pour réparer les tuiles du toit. Utilisez la fonction collect() pour ramasser la constante liste nommée shingles.
La liste contient probablement plusieurs matériaux indésirables mélangés qui doivent être retirés, d'autant plus qu'ils sont stockés dans six (6) compartiments différents, chacun contenant sa propre quantité de matériaux. Vous devez consolider tous les matériaux en un seul tas. Créez une variable nommée red_storage pour stocker tous les matériaux et une liste nommée junk afin d'y déposer tous les déchets.
Normalement, vous identifieriez simplement les matériaux, les convertiriez en nombres entiers avec int() et les stockeriez dans une variable pour pouvoir les ranger. Mais, comme vous pouvez probablement vous y attendre, compte tenu des niveaux précédents du chapitre et du sujet de cet exercice, une erreur est inévitable.
for x in range(6): player.speak(int(shingles[x])) red_storage+=int(shingles[x])
Cela va malheureusement générer une Value Error, car certains des éléments de la liste ne semblent pas être des nombres. Pour remédier à cela, vous pouvez utiliser les blocs try / except et else pour trier les matériaux. En utilisant le bloc else, nous transformons effectivement le bloc except en un filtre qui élimine les éléments indésirables de la liste tandis que le bloc else récupère et transfère les bons éléments dans la variable que nous avons créée.
for x in range(6): try: player.speak(int(shingles[x])) except: player.speak("Item %s is junk" % (x)) junk.append(shingles[x]) else: red_storage+=int(shingles[x])
Avec cela, la variable red_storage contient désormais tous les bardeaux utilisables, tandis que toutes les ordures ont été ajoutées à la liste junk. Rendez-vous à la marque X dorée dans la salle de stockage de gauche où vous vous trouvez, et utilisez la fonction write() pour consigner le nombre de bardeaux prêts à être stockés, comme ceci : await player.write("There are %s shingles ready for use in storage" % (red_storage)). Ensuite, rendez-vous à la marque X sombre sur le tapis rouge et utilisez la fonction place() pour ranger la variable red_storage dans le coffre.
Une fois cette tâche accomplie, rendez-vous dans la salle de stockage de droite. Cette salle contient des planches de bois et des matériaux nécessaires à la réparation des structures de toit et de mur. Dirigez-vous vers la marque X sombre sur le tapis vert et utilisez la fonction collect() pour récupérer la constante liste nommée planks_set dans le coffre, cette liste contenant des planches déjà débarrassées de tous les déchets. Ensuite, rendez-vous à la marque X claire à côté et utilisez à nouveau la fonction collect() pour récupérer une autre constante liste nommée shipment, constituée de matériaux de planches récemment expédiés et contenant encore quelques déchets.
Tout comme dans la salle précédente, la liste shipment contient probablement plusieurs matériaux indésirables mélangés qui doivent être retirés. Comme avant, ils sont stockés dans six (6) compartiments différents, chacun avec sa propre quantité de matériaux. Créez une variable nommée blue_storage pour stocker tous les matériaux afin de les consolider en un seul tas. Comme précédemment, les matériaux de déchets seront déposés dans la liste junk.
Pour les planches, nous allons convertir et additionner tous les matériaux utiles de la liste shipment et les ajouter à la liste planks_set, puis les consolider en utilisant int() dans la variable blue_storage. Cependant, tout comme auparavant, des erreurs sont à prévoir.
for y in range(6): planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) blue_storage+=int(planks_set[y])
Cette fois, vous pouvez vous attendre à une Type Error, ce qui se produit lorsque vous essayez d'additionner des nombres et des chaînes de caractères. Cela peut être résolu en utilisant de nouveau les blocs try / except et else. Le bloc try additionne les listes, le bloc except filtre les déchets de la liste et la clause else ajoute les planches à la variable blue_storage.
for y in range(6): try: planks_set[y]+=int(shipment[y]) player.speak(planks_set[y]) except: player.speak( "Item %s is junk. Slot only has %s items" % (y,planks_set[y])) junk.append(shipment[y]) else: blue_storage+=int(planks_set[y])
Maintenant que la variable blue_storage est remplie, vous pouvez documenter et ranger toutes les planches de bois. Rendez-vous à la marque X dorée dans la salle de stockage de droite où vous vous trouvez, faites face à la table et utilisez la fonction write() pour compter les matériaux que vous avez consolidés, comme ceci : await player.write("There are %s planks ready for use in storage" % (blue_storage))
Pour finaliser le niveau, rendez-vous à la marque X sombre sur le tapis bleu et utilisez la fonction place() pour ranger la variable blue_storage dans le coffre. Ensuite, rendez-vous à la marque X sombre sur le tapis violet dans la salle centrale et utilisez la fonction place() pour déposer la liste junk dans la trémie à ordures, complétant ainsi votre tâche.