Leçon 2 : Construire et tester le projet
Continuer à construire le projet
-
La condition de l’instruction if else doit maintenant être définie. Pour utiliser le capteur de distance pour détecter les châteaux, la commande found_object peut être utilisée. Ajoutez la commande found_object à la condition. Votre projet devrait maintenant ressembler à ceci :
def main() : # Le capteur de distance détecte-t-il un château ? if front_distance.found_object() : # Crash castle detected by a Distance Sensor pass else : # Turn to find a castle using the Distance Sensor pass -
Si le capteur de distance trouve un objet, le robot VR doit avancer pour renverser le château. Ajoutez une commande drive dans la branche « if » de l'instruction if else et définissez le paramètre pour faire avancer le robot VR. (Cette commande doit remplacer le mot depasse).
def main() : # Le capteur de distance détecte-t-il un château ? if front_distance.found_object() : # Crash castle detected by a Distance Sensor drivetrain.drive(FORWARD) else : # Turn to find a castle using the Distance Sensor pass -
Lorsque la commande found_object renvoie False, la branche 'else' s'exécutera, donc le robot VR devra se tourner pour trouver un château sur le terrain de jeu. Ajoutez une commande turn à l'intérieur de la branche 'else' et définissez les paramètres pour faire tourner le robot VR vers la droite.
def main() : # Le capteur de distance détecte-t-il un château ? if front_distance.found_object() : # Crash castle detected by a Distance Sensor drivetrain.drive(FORWARD) else : # Turn to find a castle using the Distance Sensor drivetrain.turn(RIGHT)
Pour votre information
La branche « else » de l'instruction if else fonctionne uniquement dans un projet dans le cadre d'une instruction if else. Bien que vous puissiez avoir une instruction if autonome, il n'y a pas d'instruction « else » dans VEXcode VR Python. La branche « else » est exécutée lorsque la condition de la branche « if » n'est pas remplie. Sans une condition définie (la branche « if »), la branche « else » ne fonctionnerait jamais. 
Ajoutez une boucle et testez le projet
- Avant de tester le projet, une commande supplémentaire doit être ajoutée. Les instructions If else ne vérifieront la condition qu'une seule fois avant de passer à la commande suivante en dehors de l'instruction. Dans l'unité 7, une boucle infinie while a été ajoutée au projet pour demander au robot VR de vérifier à plusieurs reprises l'état du capteur oculaire vers le bas. Pour garantir que la condition du capteur de distance est vérifiée à plusieurs reprises, faites glisser ou saisissez une boucle infinie while , puis copiez l'instruction if else à l'intérieur de la boucle infinie while. Votre projet devrait maintenant ressembler à ceci :
-
N'oubliez pas de faire attention à l'indentation lorsque vous copiez et collez des commandes dans une boucle, afin que le projet fonctionne comme prévu lorsqu'il est exécuté.
def main() : while True : # Le capteur de distance détecte-t-il un château ? if front_distance.found_object() : # Crash castle detected by a Distance Sensor drivetrain.drive(FORWARD) else : # Turn to find a castle using the Distance Sensor drivetrain.turn(RIGHT) wait(5, MSEC)
-
- Ouvrez la fenêtre Playground si elle n'est pas déjà ouverte. Assurez-vous que le terrain de jeu Dynamic Castle Crasher s'ouvre et exécutez le projet.

- Une fois que le robot VR a renversé au moins deux châteaux, rechargez l'aire de jeux et exécutez le projet sur une autre disposition de l'aire de jeux Dynamic Castle Crasher.

- À chaque exécution du projet, le robot VR tournera jusqu'à ce qu'un château soit détecté par le capteur de distance, puis se dirigera vers ce bâtiment pour le renverser.

- Pendant le déroulement du projet, le robot VR peut pousser une pièce de château jusqu'au bord et tomber du terrain de jeu. C'est parce que la commande found_object signale toujours qu'il y a un objet devant le robot VR. Lorsque cette commande signale Vrai, le robot VR avance, entraînant le robot VR à tomber du terrain de jeu.
Flux de projet avec une instruction If Else
L'instruction if else est utilisée pour que le robot VR puisse prendre une décision. Si la condition booléenne est True, alors les commandes à l'intérieur de la branche 'if' s'exécuteront. Si la condition booléenne est False, les commandes à l'intérieur de la branche 'else' s'exécuteront.
Par exemple, dans cette itération du Dynamic Castle Crasher Playground, lorsque le projet est démarré, le capteur de distance détecte un objet – la condition de la commande found_object indique True. Maintenant, la branche 'if' du projet s'exécutera et le robot VR avancera. Le robot VR ignorera la branche 'else' du projet.
- Notez que les données du capteur de distance sont également rapportées dans le tableau de bord. Lorsqu'un objet est détecté, la valeur de la distance s'affiche.
Cependant, dans cette itération du Dynamic Castle Crasher Playground, lorsque le projet est démarré, le capteur de distance ne détecte PAS d'objet - la condition de la commande found_object indique False. Maintenant le robot VR ignorera la branche « if » du projet, et la branche « else » du projet s'exécutera, donc le robot VR tournera à droite.
- Notez que la valeur du capteur de distance dans le tableau de bord est indiquée comme > 3000 mm. Le capteur de distance peut détecter des objets dans une plage de 3 000 millimètres (mm), de sorte que lorsqu'un objet n'est pas détecté, la valeur est signalée comme supérieure à (>) 3 000 mm.
Étant donné que l'instruction if else se trouve à l'intérieur d'une boucle while infinie, le projet revient au début de la boucle infiniewhile pour vérifier la condition de l'instructionif else à plusieurs reprises. Cette boucle se poursuivra indéfiniment, demandant au robot VR de vérifier en permanence la condition si sinon des centaines de fois par seconde.
- Notez que les commandes drive et turn à l'intérieur de l'instruction if else sont des commandes sans attente. Les commandes sans attente n'arrêtent pas le flux d'un projet pendant son exécution. Un comportement sans attente qui est exécuté dans une instruction if else (telle que « avancer si un objet est détecté ») se poursuivra pendant que la condition est vérifiée et ne changera que lorsque la condition changera.
Pour votre information
Une instruction if else est utilisée pour s'assurer qu'une seule branche du projet est exécutée lorsque la condition est vérifiée. Une seule instance ou condition peut être vraie à tout moment. Cela rend le projet plus efficace.

Comparez le projet actuel avec le projet créé dans l'unité 7. Le projet de l'unité 7 utilise quatre instructions

Lors de l'exécution d'un projet avec plusieurs instructions if , il est possible que plusieurs conditions renvoient Vrai (ou Faux) lorsque le projet exécute les commandes dans la boucle infinie while Des conflits comme celui-ci peuvent entraîner l'arrêt de l'exécution du projet ou son exécution plus lente.
En d’autres termes, plusieurs instructions si dans un projet, c’est comme voyager sur une route avec plusieurs rampes de sortie. Selon l'endroit où vous essayez d'aller, vous vous tourneriez à différents endroits. Par exemple, si vous alliez à l'école, vous tourniez à gauche ; si vous alliez au magasin, vous tourniez à droite. Mais que se passe-t-il si vous n'allez pas à l'école ou au magasin ? Les deux conditions signaleraient Faux, et vous resteriez sur la bonne voie. Ou si vous alliez à la fois à l'école et au magasin ? Les deux conditions signaleraient Vrai, mais vous ne pouvez pas tourner à deux endroits en même temps. 
Pour continuer l’analogie, une instruction si sinon est comme un voyage vers une bifurcation sur une route : elle vous oblige à prendre une décision. Si vous allez à l'école, tournez à gauche ; sinon, tournez à droite. Peu importe où vous allez, vous tournez soit à gauche, soit à droite. L'utilisation d'une instruction if else éviterait des bugs comme ceux ci-dessus, car cela vous obligerait à prendre une décision, car une seule condition peut être vraie à un moment donné.
Questions
Veuillez sélectionner un lien ci-dessous pour accéder au questionnaire de la leçon.
Google Doc / .docx / .pdf