Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

Introduction à la programmation Python de manière débranchée avec Alien-Python

Un alien se déplace selon un programme Python sur une grille dont chaque case est numérotée. Les élèves exécutent dans leur tête le programme Python et en déduisent la case sur laquelle se trouve l’alien à la fin de l’exécution du programme.

Article mis en ligne le 27 mars 2022
dernière modification le 23 août 2022

par Mathieu Degrange

J’ai créé cette année une banque d’exercices de programmation en Python. À chaque fois, le principe est le même :

Un alien se déplace selon un programme python sur une grille sur laquelle chaque case est numérotée. Les élèves doivent exécuter dans leur tête le programme Python et en déduire la case sur laquelle se trouve l’alien à la fin de l’exécution du programme.

Origine du projet

Les deux sous-parties suivantes contiennent des réflexions personnelles sur lesquelles vous pouvez faire l’impasse si vous êtes pressés.

La génèse

J’ai toujours regardé les activités débranchées d’un mauvais oeil, comme étant une espèce de système D pour les enseignants ayant à enseigner dans de mauvaises conditions la programmation face à 35 élèves sans ordinateurs. La programmation, c’est quelque chose de vivant, de dynamique, on réfléchit, on exécute, on teste, on modifie et on recommence, construisant petit à petit notre programme. Tout l’opposé d’un travail sur papier. J’ai donc très rapidement commencé à faire programmer les élèves sur ordinateur, leur apprenant petit à petit les mots clefs et structures du langage. Sur le moment, cela semble fonctionner, les élèves apprécient et semblent comprendre ce que je demande. J’ai très vite déchanté quand j’ai vu, un peu plus tard dans l’année, que les élèves avaient beaucoup de difficultés à réussir les concours Algoréa. Beaucoup semblaient avoir tout oublié et ne pas comprendre les notions de bases algorithmiques. Le contexte sanitaire a probablement joué un rôle dans cet échec, mais j’étais globalement déçu. Un premier constat était qu’il manquait un moyen efficace permettant aux élèves de s’entraîner en autonomie. Il fallait par ailleurs que je fasse comprendre aux élèves que la SNT était une matière comme une autre qui nécessitait un travail de révision, et pas seulement une matière « cool » dans laquelle on vient faire des trucs amusants à chaque séance.

J’enseigne dans l’académie de Créteil, mes élèves reçoivent donc tous de la part de la région d’Ile de France, un ordinateur portable, ce qui, avouons le, est une chance pour l’enseignement de la SNT. Reste le problème de la rentrée où les élèves n’ont pas encore reçu leur ordinateur. J’ai voulu attaquer très tôt la programmation en Python et ai donc dû réfléchir à des activités ne nécessitant pas l’ordinateur.

J’ai d’abord voulu traduire en python les exercices de Note la couleur. Pour ceux qui ne connaissent pas ces excellentes activités Scratch, je cite un passage du site web :

Pour chaque série, le principe est le même : un lutin se déplace sur une grille colorée suivant un script donné. L’élève doit relever la couleur sur laquelle le lutin se trouve à certains moments de ses déplacements (le bloc « Note la couleur » indique ces moments).

Si vous êtes enseignant au collège, n’hésitez pas à aller jeter un coup d’oeil sur le site internet de Jean-Yves Labouche [1].

Le système de cases colorées m’a semblé contraignant (impose une impression couleur, et peut poser problème pour les daltoniens), j’ai donc au début voulu remplacer chaque couleur par un numéro ce qui ne rendait pas très bien. À la place, j’ai créé un quadrillage où chaque case était numérotée par une lettre et un nombre, et j’ai décidé que ce serait un alien qui se déplacerait (pourquoi un alien ? j’ai tout simplement cherché une image qui m’intéressait parmi celles disponible sur https://kenney.nl et j’ai été séduit par cet alien).

Par soucis de simplicité, j’ai décidé de demander uniquement la case finale où s’arrêterait l’alien à la fin de l’exécution du programme au lieu d’une liste de cases où se trouverait l’alien lors de l’appel d’une certaine fonction. J’ai ensuite commencé à créer mon premier énoncé qui était quelque chose du genre :

L’alien se déplace selon le programme Python suivant, sur quelle case se trouve-t-il à la fin de l’exécution du programme ?

Une double casquette

En tant qu’utilisateur de Moodle (un LMS, c’est à dire une plateforme permettant de créer des cours, je m’en sers notamment pour y déposer mes fichiers de cours et d’exercices en mathématiques), je me suis dit que ce serait pratique d’avoir une correction de chacun des exercices afin de les mettre en ligne et permettre aux élèves de s’entraîner et réviser en autonomie depuis chez eux. N’ayant pas envie de créer ces corrections manuellement, je me suis dit que ce serait une bonne idée de pouvoir les générer automatiquement. J’ai donc très rapidement créé une bibliothèque qui se chargeait d’exécuter les déplacements de l’alien et de générer à la fin, une image indiquant l’ensemble des déplacements de l’alien.

Alors que cette correction était au début destinée aux élèves, cette fonctionnalité se montra très pratique lors de la création d’exercice. Je pouvais en une exécution voir ce que donnerait le parcours de l’alien sans avoir à l’exécuter moi même à la main (c’est le rôle de la commande ss() qui enregistre la correction dans un fichier et l’affiche ensuite immédiatement à l’écran via la visionneuse d’image par défaut). Pratique pour vérifier que l’alien ne sort pas du cadre ou ne fasse pas des déplacements qui rendraient la correction confuse.

J’ai donc pu rapidement créer 20 exercices pour les élèves. Pour ne pas gêner les élèves découvrant ce nouveau langage, j’ai décidé de masquer les lignes purement techniques (la ligne d’import de la bibliothèque ainsi que la dernière ligne permettant de générer la correction) en ajoutant la possibilité de générer des images contenant le code tronqué (avec coloration syntaxique, pratique pour un partage via un ENT).

Alien-Python est donc a la fois une banque d’exercices et une bibliothèque permettant à n’importe quel enseignant de générer facilement de nouveaux exercices corrigés.

Déroulé d’une séance type

Une fiche réponse contenant la grille est distribuée à chaque élève. Cette fiche est très importante puisqu’elle va permettre à l’élève de simuler le déplacement de l’alien à l’aide de son doigt.

Sur l’ordinateur de la salle dont l’écran est vidéoprojeté aux élèves, j’ouvre les deux fichiers côte à côte sujets/1.png (il s’agit du premier programme) et corrections/0.png (il s’agit de la grille réponse).

Lorsqu’une nouvelle notion apparait (introduction d’un nouveau mot clef), je l’explique aux élèves. Je demande ensuite aux élèves d’exécuter le programme dans leur tête et d’écrire leur réponse sur la fiche réponse. Puis, au bout de quelques minutes, je corrige devant eux, en exécutant le programme pas à pas et en traçant au feutre le chemin de l’alien sur l’image de droite, en apportant les éventuels commentaires nécessaires. Je passe ensuite à l’exercice suivant et ainsi de suite. Lorsque l’exercice ne semble pas poser problème, je ne corrige pas moi même l’exercice et me contente, afin de gagner du temps, de projeter directement l’image de correction présente dans le dossier correction. Si un élève ne comprend pas la correction, j’effectue en revanche la correction manuellement.

Exercices disponibles et fiches d’exercices

Voici la liste des exercices disponibles actuellement

 Les exercices 1 à 8 portent sur les déplacements et l’utilisation des variables
 Les exercices 9 à 20 portent sur les boucles de répétition.
 Les exercices 21 à 35 portent sur les conditions
 Les exercices 36 à 47 portent sur les boucles while
 Les exercices 48 à 62 portent sur les fonctions (sans valeur de retour) et les boucles for (avec utilisation du compteur)

La fiche d’exercice alien.pdf contient des cases réponses pour les exercices 1 à 20. Sur mon faible échantillon de deux classes, j’ai pu aller jusqu’à l’exercice 18 avec ma première classe et jusqu’à l’exercice 17 avec ma seconde classe (correction incluse).

La fiche d’exercices alien2.pdf contient des cases réponses pour les exercices 21 à 35 (avec mes classes j’ai pu aller jusqu’à la question 30), la fiche d’exercice alien3.pdf contient des cases réponses pour les exercices 36 à 47 et la fiche d’exercice alien4.pdf contient des cases réponses pour les exercices 48 à 62.

Les retours des élèves de SNT

 Les élèves ont très vite accroché au concept. La plupart ont bien aimé ces séances.
 Les résultats en classe semblent plutôt bons(sondage à main levée sur les bonnes réponses). Lorsqu’une nouvelle notion est introduite dans un exercice les résultats baissent mais remontent très vite au bout de quelques exercices.
 Les résultats lors des évaluations (via les concours algorea et via moodle — cf plus loin dans l’article) semblent montrer une meilleure maitrise de la part des élèves par rapport à l’année dernière. Il y a probablement d’autres facteurs qui ont joué mais je pense que ces activités ont bien aidé. Bien évidemment c’est loin d’être parfait, mais c’est bien mieux que l’année dernière.
 Certains élèves ont commencé à être lassés par le côté répétitif de la chose, en particulier à partir de la fiche n°3. C’est peut-être aussi dû au côté plus difficile de cette fiche.
 Ces exercices entraînent les élèves à lire et comprendre un programme informatique. C’est déjà une belle avancée, mais il manque clairement un côté entraînement à la rédaction de programme. J’ai à postériori comblé ce manque en créant des exercices inversés (voir plus loin dans l’article). Des séances Algorea, Pyrates, et autres outils du même genre peuvent également être une bonne idée.
 Avec du recul, je ne suis pas entièrement satisfait des exercices sur les conditions et les boucles while : ils manquent un peu de concret, il aurait fallu que j’ajoute par exemple différents types de cases afin de pouvoir exploiter des conditions portant sur la case où se trouve l’alien au lieu de conditions sur des inégalités mathématiques.
 J’ai un collègue de SNT dans mon établissement avec lequel j’échange beaucoup et il est fan de mes activités, les retours de collègues sur internet sont également plutôt bons.
 Au final je me suis mis à réutiliser mes activités avec les première spécialité mathématiques ainsi qu’avec les terminale complémentaire. Je les réutiliserai peut être pour l’enseignement scientifique et la terminale technologique)

Retour de collègues

Retour de Christophe Barnier

Voici un retour de Christophe Barnier, professeur de mathématiques et de SNT au lycée Samuel de Champlain :

J’ai eu l’occasion de travailler sur l’enseignement et l’évaluation de l’algorithmique pour mon mémoire de Master en 2019-2020, avec deux collègues, Ludwig Araujo Silva et Thibault Peypelut. D’après notre analyse, il faut bien garder en tête, en tant qu’enseignant, que la classe de Seconde est avant tout une classe d’alphabétisation algorithmique. Il s’agit de donner aux élèves une image du dispositif algorithmique (ensemble des variables modifiées par l’algorithme au cours de l’exécution), de poursuivre l’apprentissage du champ lexical algorithmique (affectation, itération, condition) lors de l’analyse, de l’interprétation puis de la modification d’algorithmes simples. Une première phase d’écriture peut alors être envisagée, mais la conception et l’écriture d’algorithmes plus complexes n’interviendra qu’en classe de Première.
J’ai utilisé cette année l’outil de Mathieu Degrange, Alien Python, pour introduire la programmation en Python avec mes trois classes de seconde de SNT. C’est un outil parfaitement adapté pour la première phase d’alphabétisation, c’est-à-dire la lecture, l’analyse et la compréhension d’algorithmes, ainsi que la découverte et l’assimilation des premiers schémas. Il m’a permis de faire le point sur les acquis des élèves en algorithmique, les élèves ont rapidement retrouvé les schémas algorithmiques de base acquis avec Scratch (comme la pince des boucles…). Il m’a ensuite permis d’introduire et d’expérimenter les notions de variables et de dispositif algorithmique, et des schémas de plus en plus complexes (boucle, boucle imbriquée, branchements conditionnels simple ou imbriqué).
C’est un outil simple et efficace, très versatile, qui a l’avantage de demander très peu de moyens de mis en œuvre, ce qui est très appréciable pour l’enseignant. Il permet aussi de créer facilement ses propres exercices et s’adapte donc à la pédagogie de chacun. Pour les élèves ce sont des séances très stimulantes, avec une émulation très saine. Les moyens mis en œuvre étant simples (papier crayon), il n’y a pas d’hétérogénéité technique comme dans les séances devant poste informatique, et les élèves sont donc entièrement à leur réflexion et se familiarisent facilement avec le langage Python.

Retour de Stephan Grignon

Mes élèves sont tous équipés par la région d’un ordinateur portable, je pourrais donc les faire programmer dès le début de l’année. Pourtant je préfère commencer par leur faire analyser des programmes simplifiés pour éprouver leur logique et leur apporter un complément d’algorithmie. Y ajouter la prise en main d’un logiciel, les lignes techniques du langage de programmation, ... représenterait une surcharge cognitive pour beaucoup d’élèves. Procéder de cette façon donne de bien meilleurs résultats.
Utiliser les exercices Python Alien m’a permis de mettre les élèves en action sans contraintes car on va à l’essentiel. Cela permet à la plupart des élèves de progresser rapidement et aux plus en difficulté de trouver de l’aide chez leurs camarades.

Une limite importante

Avec mon activité, seule la case finale compte alors que c’est en réalité l’ensemble du chemin emprunté qui est important. Ainsi les deux programmes suivants auront la même réponse :

Il est important que les élèves se concentrent lors de la correction sur l’ensemble du chemin et non pas uniquement sur la case finale. Les deux exemples précédents font justement partie des exercices fournis (il s’agit des exercices 15 et 16) et sont l’occasion d’aborder l’importance de l’ordre d’exécution des boucles. Une solution pour contourner ce problème serait de demander aux élèves de noter chaque étape intermédiaire. Il existe d’ailleurs une commande secrète localiser() qui change ponctuellement la couleur de l’alien et on pourrait demander de lister toutes les cases sur lesquelles l’alien a été localisé (mais pour l’instant aucun exercice n’utilise cette commande).

L’évaluation des élèves grâce à moodle

Comme précisé dans la partie sur les origines du projet, j’ai mis en ligne les corrections des exercices sur la plateforme de cours Moodle disponible dans mon académie, mais je me suis dit que je pouvais aller encore plus loin. Après plusieurs heures de travail j’ai pu générer directement depuis mes exercices des quiz importables sur la plateforme moodle. Ainsi, au lieu de simplement afficher les images de correction, j’ai pu créer des quiz d’entraînement : les élèves voient le programme s’afficher, tentent de trouver la réponse puis la saisissent sur la plateforme. Ils savent ensuite immédiatement s’ils ont juste et la correction s’affiche.

Sur le même principe, j’ai pu créer des évaluations à partir d’une sélection de questions. Ainsi les élèves ont juste à se rendre sur moodle pour passer l’évaluation et j’obtiens immédiatement une note pour chaque élève à la fin. Il faut juste penser à mélanger l’ordre des questions (et éventuellement à désactiver la navigation libre) afin d’éviter la triche entre élève. Les élèves sont incités à réviser l’évaluation à l’aide des quiz d’entraînement ainsi qu’à l’aide de fiches de cours sur les notions étudiées.

Capture d’écran de la partie “Alien Python” de mon cours sur moodle sur la programmation en Python

J’ai au total fait passer 2 évaluations à mes classes de SNT.

La première évaluation

Cette première évaluation portait sur les notions de variables, de boucles de répétitions, et de structures conditionnelles (fiches 1 et 2).

J’ai mis une limite de temps de 45 minutes pour répondre (pour plus de la moitié des élèves, 30 minutes ont suffit). L’évaluation était composée de 20 exercices tous déjà vus (à savoir les exercices 6, 7, 9, 11, 12, 14 et 17 à 30). Aucune surprise pour les élèves donc.

La moyenne et la médiane sont de 12/20, l’écart type de 4,1/20. Voici la répartition des notes des 65 élèves ayant passé l’évaluation :

Environ 38% des élèves ont utilisé la possibilité de s’entraîner en faisant au moins un des deux quiz d’entraînements (parmi les élèves s’étant entraîné, 33% ont fait uniquement le premier quiz d’entraînement, 5% uniquement le deuxième quiz d’entraînement, et 31% les deux). J’ai regardé rapidement le lien entre les notes et le fait d’avoir effectué les quiz d’entraînements : tous les élèves qui ont eu les meilleures notes avaient fait les exercices d’entraînement. Parmi les élèves ayant obtenu moins de 10, seulement 25% avaient fait uniquement l’entraînement n°1 (et le reste aucun entraînement). Parmi ceux ayant obtenu entre 10 et 12, seulement 12,5% ont fait les exercices d’entraînements (un élève n’a fait que le premier, l’autre a fait les deux).

Les exos 20 et 26 à 30 ont eu un taux de réussite inférieur à 50%.

Analyse d’erreurs via moodle

Moodle permet d’obtenir de nombreuses statistiques. Il est par exemple possible d’obtenir des statistiques sur les réponses des élèves. C’est très pratique pour essayer de comprendre les erreurs les plus fréquentes afin de pouvoir insister dessus.

Quelques analyses des erreurs des questions les moins bien réussies sont proposées dans les onglets suivants.

Exercice 20

Cette question a été réussie par 32% des élèves.

23% des élèves ont répondu D11.

Je pense que les élèves qui ont fait cette erreur n’ont exécuté qu’une seule fois la ligne 7 qui incrémente d. Les élèves confrontés à la ligne 12 ont probablement déterminé la valeur de d en survolant le programme et en lisant les lignes 4 et 7 au lieu de suivre pas à pas l’évolution de la valeur de d. Si les élèves exécutent bien pas à pas le programme en déplaçant leur doigt sur la grille, rares sont les élèves à prendre des notes sur les valeurs des différentes variables.

Exercice 26

Cette question a été réussie par 40% des élèves.

23% des élèves ont répondu G8 et 15% ont répondu G6.

Je pense que les élèves ont bien vu que la condition ligne 6 était fausse et n’ont pas exécuté la ligne 7, mais ont tout de même exécuté les lignes 8 à 10 pour certains, et 8 à 11 pour d’autres.

Exercice 28

Cette question a été réussie par 34% des élèves.

12% des élèves ont répondu A15.

Je pense que ces élèves ont considérées que la ligne 17 faisait parti de la boucle for de la ligne 15.

A titre informatif également, j’ai réutilisé ces activités de SNT avec mes premières spécialité mathématiques (en allant beaucoup plus vite et en faisant une trentaine d’exercices en 1h) et en reprenant ensuite le même principe (quiz d’entraînement puis même évaluation finale), et voici les résultats :

 14,7/20 de moyenne
 Médiane à 16/20
 Écart type de 4,1
 Exercices 27, 29 et 30 avec un taux de réussite inférieur à 50%
 70% des élèves ont fait les exercices d’entraînement.
 Répartition des notes des 25 élèves ayant passé l’évaluation :

La deuxième évaluation

Cette évaluation portait essentiellement sur la boucle while.

 9,3 de moyenne
 Médiane à 9,1
 Écart type de 5,2
 Exercice 29 et 42 à 45 avec un taux de réussite inférieur à 50%
 18% des élèves ont fait les exercices d’entraînement (et ils proviennent presque tous de la même classe, peut être n’avais-je pas rappelé clairement les exercices d’entraînement pour une classe ?). En terme de résultats les élèves s’étant entraîné ont en moyenne eu une bien meilleure note à l’évaluation que lors de l’entraînement. Pour les élèves s’étant entrainé : 4 ont eu plus de 16 à l’évaluation, 5 ont eu entre 10 et 13, 2 ont eu entre 7 et 8 et 1 a eu entre 1 et 2.
 Répartition des notes des 68 présents :

Analyse d’erreurs

A nouveau je vous propose d’analyser les erreurs de certains exercices dans les différents onglets.

Exercice 42

Cet exercice a été réussi par 29% des élèves.

16% des élèves ont répondu D2.

Ces élèves ont probablement oublié qu’ils étaient dans la boucle de répétition de la ligne 4 et n’ont exécuté les lignes 5 à 9 qu’une seule fois.

Exercice 44

Cet exercice a été réussi par 24% des élèves.

19% des élèves ont répondu N12.

Ces élèves semblent n’avoir appliqué la boucle while qu’à la ligne 5 au lieu des lignes 5 à 9.

Le débranché est-il réellement une contrainte ?

Comme expliqué au tout début, les activités débranchées étaient pour moi un système D, on ne les faisaient que parce qu’on avait pas d’ordinateur à notre disposition. Avec du recul, je ne suis plus du tout d’accord. Le papier permet de se concentrer uniquement sur le programme et de retirer toutes distractions annexes. Autre avantage, on évite tous les problèmes techniques, qui sont malheureusement trop nombreux.

Les exercices inversés

Avec le recul, je me rend compte que ces exercices entraînent les élèves à comprendre un programme, mais pas à programmer. Cela s’est ressenti un peu lors des entraînements aux concours algorea où les élèves ont eu du mal à programmer la première fois. J’ai créé à postériori une fiche d’exercices alienA.pdf inversés où il faut compléter un programme afin d’obtenir un déplacement donné. Je ferai l’année prochaine cette fiche juste après avoir fait les fiches alien.pdf et alien2.pdf.

Pour aller plus loin ...

Créer son propre exercice

Il est très facile de créer son propre exercice. Il suffit de dupliquer dans le même répertoire un des exercices fournis. Exécuter le fichier permettra de générer la grille de correction. Exécuter le programme generer_sujet.py dans le dossier tool permettra de générer le programme au format image.

Lors de la conception d’un exercice, il ne faut pas hésiter à exécuter le programme pour voir immédiatement le résultat obtenu et voir si le chemin est satisfaisant. Il faut à tout pris éviter que l’alien sorte de la grille ou s’arrête deux fois sur une même case. J’évite aussi au maximum les croisements de chemins.

Importer les exercices dans moodle

Le fichier moodle.xml présent dans le dossier exercices/tools/ peut être importé dans la banque de question moodle. Il vous reste plus qu’à ajouter les questions de votre choix dans votre test à l’aide de la banque de questions. Une procédure détaillée peut être trouvée ici.

Utilisation avec Wooclap

Wooclap est un service permettant de créer des diaporamas interactifs. Le professeur peut créer des questions et les élèves y répondent via leur ordinateur ou téléphone. C’est gratuit pour les professeurs de collège et de lycée. Comme wooclap permet d’importer des questions au format moodle, il est possible d’y importer nos questions de programmation en suivant ce tutoriel. En revanche pour avoir testé, je trouve que cela n’apporte pas grand chose, pire on y perd en concentration des élèves et en problèmes techniques à résoudre. Le seul avantage serait de pouvoir repérer les erreurs fréquentes pour en discuter immédiatement.

Utilisation avec Pronote

Le fichier pronote.xml présent dans le dossier exercices/tools/ peut être importé dans pronote afin d’être utilisé dans un QCM.

Utilisation avec Capytale

Si vous avez accès à capytale dans votre ENT, vous pouvez rechercher l’activité Alien Python dans la bibliothèque afin de la cloner et de permettre à vos élèves de programmer les déplacement de l’alien directement dans le navigateur.

Dans la même lignée ... pyxel-art !

Sur un principe similaire j’ai créé une banque d’exercices où un programme python générant un pixel-art est présenté aux élèves et ceux-ci doivent l’exécuter dans leur tête pour obtenir le pixel-art correspondant.

Vous pouvez accéder au projet ici.

Pour conclure

Vous pouvez vous rendre sur la page github pour en savoir plus :

https://github.com/DegrangeM/alien-python

Pour télécharger les exercices, vous pouvez directement cliquer ici.

L’ensemble du projet est sous licence libre (MIT), vous pouvez donc l’utiliser librement.