Skip to main content

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. Trois extraits de code démontrant des instructions conditionnelles en Python, chacune comportant une instruction if avec une condition suivie du mot-clé pass. Les deux premiers extraits ont des cochettes vertes au-dessus d'eux, indiquant une utilisation correcte. Le premier extrait comprend uniquement une instruction if, tandis que le second comprend à la fois une instruction if et une instruction else avec le mot-clé pass dans chacune d'elles. Le troisième extrait, marqué d'une croix rouge, se compose uniquement d'une instruction else avec pass, indiquant une utilisation incorrecte, car une instruction else doit suivre une instruction if.

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 vue de dessus du Dynamic Castle Crasher Playground montrant que seuls certains des châteaux ont été renversés. Le robot VR se trouve en haut à droite de l'aire de jeu après son déplacement autour de l'aire de jeu.
  • 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. Une vue de haut en bas du Dynamic Castle Crasher avec l'interface du terrain de jeu. Le bouton de réinitialisation en bas à gauche de l'interface du terrain de jeu est mis en surbrillance avec une case rouge.
  • À 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.Une vue angulaire de l'aire de jeu Dynamic Castle Crasher montrant le robot VR poussant un morceau de château au-delà de la ligne de démarcation rouge et du bord de l'aire de jeu.
  • 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.Sur la gauche se trouve l'extrait de code actuel du projet. Sur la droite se trouve la vue de haut en bas de l'aire de jeux Dynamic Castle Crasher avec l'interface de l'aire de jeux visible. La mesure du capteur de distance sur l'interface du terrain de jeu indique 568 mm et est mise en évidence par une boîte rouge. Cela montre que le château au milieu de l'aire de jeux est à 568 millimètres du robot VR.

  • 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.Sur la gauche se trouve l'extrait de code actuel du projet. Sur la droite se trouve la vue de haut en bas de l'aire de jeux Dynamic Castle Crasher avec l'interface de l'aire de jeux visible. La mesure du capteur de distance sur l'interface du terrain de jeu indique 1354 mm et est mise en évidence par une boîte rouge. Cela montre que le château au sommet de l'aire de jeux est à 1354 millimètres du robot VR.

  • 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.This is the project's code snippet surrounded by an orange arrow that begins and ends on the while True: statement at the top of the code snippet. There is a note on the arrow that says Loops continuously, showing that anything nested in the while True loop will repeat forever.

  • 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.

Le code du projet Python avec des flèches pointant vers les instructions if et else. Le haut des flèches indique Vérifie l'état du capteur de distance pour afficher l'instruction distance.found_object if vérifie l'état. Si l'objet est détecté, la commande sous l'instruction if sera exécutée, mais si aucun objet n'est détecté, la commande sous l'instruction else est exécutée.

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

Le code du projet de l'unité 7 avec une grande flèche orange entourant l'ensemble du code, commençant et se terminant par l'instruction while True. Une note sur la flèche orange indique que les instructions If contenues dans la boucle Infinite while sont vérifiées à plusieurs reprises. Les flèches vertes à l'intérieur de l'instruction while True montrent le flux du projet, en commençant par les instructions if individuelles indiquant si une certaine couleur est vue et le comportement qui doit être fait en conséquence, qu'il s'agisse de faire un comportement ou de passer à l'instruction if suivante jusqu'à la fin où tout boucle à nouveau.

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. Un diagramme montrant une intersection en forme de T gris avec trois flèches directionnelles - une pointant vers la gauche, une pointant vers le haut et une pointant vers la droite. Au centre de l'intersection se trouve un robot VR. À droite du diagramme se trouvent deux déclarations conditionnelles au format code : si vous allez à l'école : tournez à gauche et si vous allez au magasin : tournez à droite. Les instructions if sont écrites en noir et bleu, avec if en bleu et les instructions directionnelles en bleu.

 

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é.A diagram showing a gray Y-shaped intersection with two directional paths - one leading left and one leading right. In the center of the intersection is the VR Robot. Above the diagram is code showing conditional statements in code format: if going to school: Turn left and else: Turn right. The if and else statements are written in black and blue text, with if and else in blue and the directional instructions in lighter blue.  

Questions

Veuillez sélectionner un lien ci-dessous pour accéder au questionnaire de la leçon.

Google Doc / .docx / .pdf