Skip to main content

Leçon 2 : Utiliser une boucle while

Dans cette leçon, vous allez créer un projet en utilisant le capteur de pare-chocs et la boucle while . Dans le mini-challenge, vous appliquerez ces compétences pour naviguer du début du labyrinthe mural à la lettre « A ».

Le terrain de jeu Wall Maze ne montre pas le tableau de bord du terrain de jeu. Le robot VR a un mur devant lui qu'il touche, indiquant qu'il devra tourner pour pouvoir progresser dans le labyrinthe.

Résultats d'apprentissage

  • Identifiez que les commandes sans attente permettent au projet de se poursuivre même si le comportement de la commande n'est pas encore terminé.
  • Identifiez qu'une commande en attente complète le comportement avant de poursuivre le projet.
  • Identifiez que la boucle while vérifiera de manière répétée une condition booléenne et ne passera pas à la commande suivante tant que la condition ne renverra pas Vrai.
  • Identifiez que la boucle while  est utilisée avec des commandes sans attente (par exemple drive) afin de vérifier l'état du capteur.
  • Identifiez que le mot clé et non inverse la valeur d'une condition booléenne de Vrai à Faux ou de Faux à Vrai. 
  • Identifiez que les commandes left_bumper.pressed et right_bumper.pressed renvoient une valeur True ou False dans une boucle while.
  • Décrivez comment créer un projet qui a un robot VR qui avance jusqu'à ce que le capteur de pare-chocs soit enfoncé.

Pendant que les boucles

La boucle while accepte les conditions booléennes. Tandis que les boucles vérifient à plusieurs reprises une condition booléenne et contrôlent le flux du projet. La boucle while continuera à boucler tant que la condition est& Vrai. La boucle while quittera la boucle et passera à la commande suivante en dehors de la boucle une fois que la condition sera signalée comme False.

La boîte à outils VEXcode VR Python. La commande while est surlignée en rouge, avec une flèche pointant vers l'interface de codage. Le code indique def main() :, while condition :, wait(5, MSEC) après que la commande while a été glissée de la boîte à outils vers l'interface de codage.

Essentiellement, une boucle while indique au robot VR de continuer à effectuer un comportement pendantcertaine condition est . La logique est similaire à ce scénario : pendant que le soleil brille, allez jouer dehors. Que feriez-vous ? L'état « le soleil brille » détermine où vous devez être. Lorsque le soleil brille, la condition est vraie, alors vous allez jouer à l'extérieur. Lorsque le soleil se couche, cette condition est fausse, de sorte que vous reveniez à l'intérieur.

Sur le côté gauche se trouve un exemple de code lisant pendant que le soleil brille :, jouez à l'extérieur. Après l'instruction while, il se lit à l'intérieur. Sur la droite, une fille fait du vélo devant sa maison par une journée ensoleillée. Selon le code, elle jouera à l'extérieur jusqu'à ce que le soleil ne brille plus, puis ira à l'intérieur.

While Loops et le problème du labyrinthe mural

La même logique s'applique au robot VR dans le labyrinthe mural. Lorsque le capteur de pare-chocs n'est pas enfoncé, le robot VR doit continuer à avancer. Lorsqu'il est enfoncé, il doit s'arrêter ou tourner. En utilisant les boucles while  en conjonction avec des commandes sans attente, telles que drive, nous pouvons coder le robot VR pour faire exactement cela. Cependant, les commandes du capteur de pare-chocs utilisent la condition du capteur de pare-chocs enfoncé (left_bumper.pressed ou right_bumper.pressed) Afin de coder le robot VR pour qu'il se déplace pendant que le capteur de pare-chocs est et non enfoncé, nous devons utiliser un opérateur et non .

def main() :
	while not condition :
		wait (5, MSEC)

Pour votre information

Les commandes de non-attente et d'attente déterminent le moment où la commande suivante commence un comportement. Les commandes en attente, comme drive_for et turn_for, terminent leurs comportements avant de passer à la commande suivante dans le projet. Les commandes sans attente, telles que Drive et Turn, continuent à passer à la commande suivante dans le projet même si le comportement de la commande sans attente n' est pas terminé.

Commandes d'attente

drivetrain.drive_for(AVANT, 200, MM)
drivetrain.turn_for(DROITE, 90, DEGRÉS)

Commandes sans attente

drivetrain.drive(AVANT)
drivetrain.turn(DROITE)

Le mot-clé Not

Le mot clé not sera généralement utilisé avec les boucles while , pour que les commandes à l'intérieur de la boucle s'exécutent tant que la condition renvoie False. Pour reprendre l'exemple du « soleil brille », le même effet peut être obtenu en utilisant un opérateur et non . Tant que le soleil ne brille pas, entrez.

Sur la gauche montre un exemple de code, lire alors que le soleil ne brille pas :, entrer. Après la commande while est jouée à l'extérieur. Sur la droite, on voit une maison pendant la nuit où la lune est sortie. Selon ce code, tant que le soleil ne brille pas, personne ne jouera à l'extérieur et restera à l'intérieur.

Dans le labyrinthe mural, cela est utile pour que nous puissions coder le robot VR de sorte que tant que le capteur de pare-chocs n'est pas enfoncé, il avance. La condition est toujours « si le capteur de pare-chocs est enfoncé », mais de cette façon, lorsqu'il signale Faux (non enfoncé), le flux du projet reste dans la boucle. Lorsque le capteur de pare-chocs est enfoncé, la condition est alors vraie, de sorte que le projet sort de la boucle.Un organigramme de projet décrivant le flux d'un projet avec un temps non structuré. Sur la gauche, le projet dans la définition principale se lit comme s'il n'était pas appuyé sur le pare-chocs gauche, avec une commande Drive Forward et Wait 5 millisecondes à l'intérieur de la boucle. À l'extérieur de la boucle se trouve une commande d'arrêt. À droite, le flux du projet illustré par une flèche rouge cyclique indique que si le pare-chocs n'est pas enfoncé, cette condition retourne fausse et le robot avance. Ensuite, une flèche verte droite pointe vers le bas illustrant que lorsque le pare-chocs est enfoncé, la condition redevient vraie et le projet se détache de la boucle, provoquant l'arrêt de la conduite du robot.

Pour votre information

Le mot clé not est un opérateur logique inverse la valeur d'un booléen. Mettre le mot-clé not devant une commande qui renvoie une valeur booléenne inversera True à False et False à True. Par exemple, imaginez que le capteur de pare-chocs gauche du robot VR est enfoncé et que la  commande left_bumper.pressed renvoie True. Le mot clé et non inversera la valeur booléenne et fera que cette expression renverra False.

not left_bumper.pressed()

Selon les données du capteur que vous utilisez, le mot clé et non peut être nécessaire pour qu'un robot VR exécute les comportements souhaités. 

def main() :
	while not left_bumper.pressed() :
		drivetrain.drive(FORWARD)
		wait(5, MSEC)
	drivetrain.stop()

Création d'un projet avec une boucle While et le capteur de pare-chocs

Nommez et enregistrez le projet

  • Ouvrez un nouveau projet de texte et sélectionnez le terrain de jeu Wall Maze lorsque vous y êtes invité. La tuile de sélection Wall Maze Playground lit Wall Maze en bas et montre le labyrinthe ci-dessus.
  • Nommez le projet Unit4Lesson2.La barre d'outils VEXcode VR. Le nom du projet au milieu de la barre d'outils indique Unité 4 Leçon 2 et est mis en évidence par une case rouge.

     

  • Faites glisser ou tapez la commande while dans l'espace de travail pour remplacer la commande Drivetrain qui se remplit automatiquement dans le cadre d'un nouveau projet Texte. Notez qu'il y a une commande a wait à l'intérieur de la boucle. Ne supprimez pas la commande wait , cela garantira que le robot VR exécute correctement le projet. Votre projet doit ressembler à ceci :

    def main() :
    	while condition :
    		wait(5, MSEC)
  • Tapez un opérateur et non après le « while » dans la commande while . Votre projet devrait maintenant ressembler à ceci :

    def main() :
    	while not condition :
    		wait(5, MSEC)
  • Faites glisser ou tapez la  commande left_bumper.pressed dans la « condition » de la boucle while. Les commandes à l'intérieur de la boucle s'exécuteront lorsque la condition n'est pas vraie, c'est-à-dire lorsque le capteur de pare-chocs gauche n'est pas enfoncé. Votre projet devrait maintenant ressembler à ceci :

    def main() :
    	while not left_bumper.pressed() :
    		wait(5, MSEC)
  • À l'intérieur de la boucle while , faites glisser ou tapez la commande drive. Assurez-vous que la commande drive et la commande wait sont correctement indentées dans la boucle while , afin que la boucle s'exécute comme prévu. Vous pouvez utiliser les lignes directrices comme aide visuelle. Votre projet devrait maintenant ressembler à ceci :

    def main() :
    	while not left_bumper.pressed() :
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
  • Faites glisser ou saisissez une commande stop en dehors de la boucle while  Assurez-vous que la commande stop est alignée avec la boucle while et non en retrait, afin qu'elle s'exécute en dehors de la boucle comme prévu. Vous pouvez utiliser les lignes directrices comme aide visuelle.  Votre projet devrait maintenant ressembler à ceci :

    def main() :
    	while not left_bumper.pressed() :
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
    	drivetrain.stop()
  • Ouvrez la fenêtre Playground si elle n'est pas déjà ouverte. Assurez-vous que le terrain de jeu Wall Maze s'ouvre. 
  • Exécutez le projet.
  • Regardez le robot VR conduire depuis le début du labyrinthe mural et arrêtez-vous lorsque le capteur de pare-chocs est pressé par le mur.
  • La commande Drive permet au robot VR de continuer à avancer tout en vérifiant l'état du capteur de pare-chocs avec la commande Left Bumper Pressed. Une fois que la commande left_bumper.pressed indique True, le robot VR passe à la commande suivante en dehors de la boucle et arrête de conduire.

Sélectionnez le bouton Suivant pour continuer le reste de cette leçon.