TigerJython4Kids | Robotique
Robotik
|
OBJECTIFS DE CETTE SECTION... |
|
STRUCTURE SÉQUENTIELLE D'UN PROGRAMME |
Un programme informatique est constitué de plusieurs lignes de code organisée séquentiellement qui vont s’exécuter les unes après les autres. Pour pouvoir utiliser la luciole, il faut toujours commencer le programme par la ligne from mbglow import * permettant de charger le module mbutils.
Les instructions de la luciole sont essentiellement des mots anglais suivis de parenthèses qui peuvent contenir d’autres expressions. Il est essentiel de respecter la casse (faire la différence entre les majuscules et les minuscules). L’instruction forward()demande à la luciole de se déplacer d’un pas en avant par rapport à la direction dans laquelle elle regarde. Au début de l’exécution du programme, la luciole regarde toujours vers le haut. Il est possible de tourner la luciole de 90° vers la gauche avec la commande left(90)et de 90° vers la droite avec la commande right(90) On ne remarque cependant rien tant que la luciole n’a pas avancé avec forward() . Le programme suivant demande à la luciole de dessiner la trace représentée :
Il est conseillé de recopier ce programme dans l’éditeur de TigerJython ou de faire du copier-coller afin de le tester. Pour le copier, il faut cliquer sur Copy to clipboard et le coller dans l’éditeur de TigerJython avec Ctrl+V.
|
RÉPÉTITION AVEC REPEAT |
Program: from mbglow import * makeGlow() repeat 4: forward() left(90) |
INFORMATION DIDACTIQUE |
Le mot-clé repeat ne fait pas partie de la syntaxe conventionnelle de Python mais a été défini dans TigerJython pour permettre l’introduction très précoce des boucles, sans même avoir besoin de parler de variables. De telles structures de répétition sont très naturelles car on parle très souvent de répéter une tâche un certain nombre de fois dans la vie courante. Si l’on veut rester compatible avec le langage Python standard, il faut remplacer les instructions repeat n: par for step in range(n):. On peut fabriquer des boucles infinies en laissant tomber le nombre n de l’instruction, à savoir en écrivant simplement repeat. |
Attention ! Il faut être très attentif à l’indentation des lignes au sein des boucles repeat. Program: from mbglow import * makeGlow() setPos(-2, -2) repeat 4: repeat 4: forward() right(90) |
FONCTIONS (BLOCS DE CODE NOMMÉS) |
Les blocs de code nommés, appelés fonctions en Python, permettent de mieux organiser les programmes et de les rendre plus clairs et plus lisibles. Il est possible d’appeler à plusieurs reprises des fonctions personnalisées. L’utilisation des fonctions est essentielle pour éviter de devoir copier-coller à différents endroits du code des instructions identiques ou très similaires (duplication de code) et elles rendent également possible de décomposer les problèmes en sous-problèmes plus facilement résolubles.
Il est important, pour une bonne lisibilité du programme, de baptiser la fonction d’un nom descriptif qui renseigne sur ce que la fonction fait. Il n’est pas autorisé d’utiliser des caractères spéciaux pour nommer les fonctions (espaces, guillemets simples ou doubles, accents, caractères de ponctuation, etc ...). La convention veut que les noms de fonctions débutent toujours par une minuscule. Program: from mbglow import * makeGlow() def square(): repeat 4: forward() forward() left(90) square()
Program: from mbglow import * makeGlow() def square(): repeat 4: forward() forward() left(90) setSpeed(80) repeat 4: square() right(90) |
VARIABLES |
La ligne v = v + 20qui, au premier coup d’œil, ressemble à s’y méprendre à une équation va en réalité changer la valeur contenue dans la variable v en ajoutant 20 à la valeur actuellement stockée dans v et en affectant ce nouveau résultat à la variable v. Il s’agit d’une affectation. L’instruction showTrace(False) a pour conséquence que la luciole ne laisse pas de trace derrière elle. Program: from mbglow import * makeGlow() def square(): repeat 4: forward() forward() right(90) v = 30 showTrace(False) setPos(-1, -1) repeat 4: setSpeed(v) square() v = v + 20 |
RÉPÉTITION AVEC UNE BOUCLE WHILE |
La boucle while compte parmi les structures de programmation les plus importantes. Elle peut être utilisée dans toutes les circonstances où il faut répéter un bloc de code et on la retrouve dans pratiquement tous les langages de programmation. Cette structure de contrôle est introduite par le mot-clé while suivi d’une expression booléenne (conditionnelle) et du double-point habituel. Tant que la condition en question vraie, les instructions contenues dans le bloc de code indenté sont répétées. En langage courant, on pourrait exprimer cette structure de la manière suivante : TANT QUE la condition est vraie: Exécuter les instructions L’expression conditionnelle (booléenne) utilise en général des opérateurs de comparaison tels que
Remarquez qu’il y a deux égal d’affilée pour signifier l’opérateur qui compare l’égalité.
Program: from mbglow import * makeGlow() setSpeed(90) showTrace(False) a = 0 while a <= 360: forward() forward() back() back() left(45) a = a + 45
Program: from mbglow import * makeGlow() def square(): repeat 4: forward() forward() left(90) clear() setSpeed(90) showTrace(False) setPos(2, 0) left(45) while True: square() |
RÉPÉTITION AVEC LA STRUCTURE FOR IN RANGE |
Il est cependant bien plus pratique d’utiliser une boucle for dans ce cas car la variable i va être gérée incrémentée automatiquement, ce qui élimine des sources d’erreur. Avec la boucle for i in range(n):, la variable i prend successivement des valeurs entières comprises entre 0 et n-1 alors qu’avec la boucle for i in range(a, b), elle va prendre toutes les valeurs entières entre a et b - 1. Il faut remarquer que la dernière valeur (n, respectivement b) ne sont jamais incluses. Avec la boucle for x in range(-2, 3), la variable x va donc prendre les valeurs -2, -1, 0, 1, 2. Cela va enclencher successivement les LEDS de la première rangée les unes après les autres. L’instruction sleep(500)permet quant à elle de mettre le programme en pause pendant 500 ms, ce qui permet à la rétine de constater l’avancement de la luciole. Program: from mbglow import * makeGlow() clear() for x in range(-2, 3): setPos(x, 2) sleep(500)
Program: from mbglow import * makeGlow() clear() for y in range(-2, 3): for x in range(-2, 3): setPos(x, y) sleep(300) |
STRUCTURE IF - ELSE (SÉLECTION) |
La structure de sélection permet de faire en sorte que certains blocs de code ne s’exécutent que sous certaines conditions. Une telle structure est introduite par le mot-clé if suivi d’une condition. Si la condition est vraie, c’est le bloc d’instruction sous le if else qui le sera. Pour exprimer la condition, on utilise très souvent les opérateurs de comparaison <, <=, =>, >, == et !=. Les instructions sous le if et le else doivent être indentées de manière cohérente. La partie else est optionnelle.
Program: from mbglow import * makeGlow() right(90) x = 0 showTrace(False) while True: forward() x = x + 1 if x == 3: setPos(-2, 0) x = -2 Dans le programme suivant, la luciole doit aléatoirement faire deux pas en avant ou en arrière, marquer une courte pause et effacer sa trace et regagner sa position de départ. Ce mouvement est répété 20 fois de suite.
Program: from mbglow import * from random import randint makeGlow() setSpeed(80) repeat 10: r = randint(0, 1) if r == 1: forward() forward() else: back() back() sleep(300) clear() setPos(0, 0) |
À RETENIR |
Les structures de programmation fondamentales à maîtriser au minimum pour pouvoir programmer sont suivantes :
|
À TOI DE JOUER |
|