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.

Intégration de Python dans ScratchGGB

Patrick Raffinat s’est fixé un défi : permettre l’exécution du code Python directement dans ScratchGGB. Et le défi est relevé !

Article mis en ligne le 2 novembre 2023
dernière modification le 8 mars 2024

par Patrick Raffinat

A) Introduction

Par le passé, j’ai développé plusieurs logiciels pédagogiques, dont deux en rapport avec cet article :

  • ScratchGGB (voir article), qui associe Scratch et Geogebra.voir
  • SofusPyScratch (voir article), qui facilite la transition entre programmation Scratch (collège) et programmation Python (lycée).

Cela explique probablement pourquoi, après avoir lu un récent article de Jean-Yves Labouche présentant le logiciel PyGgb (voir article), j’ai eu l’idée suivante : intégrer Python dans ScratchGGB. L’objectif initial était simplement d’ajouter un traducteur de blocs, le code Python ainsi obtenu étant ensuite à copier-coller dans PyGgb pour y être exécuté.

Et puis, l’appétit venant en mangeant, je me suis fixé un nouvel objectif beaucoup plus ambitieux : permettre l’exécution du code Python directement dans ScratchGGB. Bien évidemment, je n’ai pas ensuite effectué tout ce travail de programmation simplement pour éviter aux élèves de peu chronophages copier-coller, mais pour des raisons pédagogiques plus fondamentales :

  • ajouter des fonctionnalités absentes dans PyGgb : instructions géométriques telles que Midpoint ou PerpendicularLine, interaction avec le tableur de Geogebra…
  • bénéficier, au moins partiellement, de la banque d’exercices prêts à l’emploi que j’avais créée pour le collège

Par « bénéficier partiellement » de la banque d’exercices, je veux dire deux choses :

  • certains exercices, en particulier ceux ludiques que nous avons conçus avec Juliette Hernando pour les sixièmes/cinquièmes (voir article), ne sont guère transposables au contexte lycée.
  • les énoncés des autres exercices seront à interpréter en fonction d’un contexte Python : là où il est écrit « compléter le programme (Scratch) initial », il faudra comprendre « traduire en Python le programme (Scratch) initial, puis compléter le code ainsi obtenu ».

Mais pour démarrer, mieux vaut commencer par un exercice dont les énoncés sont adaptés à Python : j’en ai donc ajouté un à la banque d’exercices. C’est cet exercice, comportant plusieurs activités, qui va servir de fil rouge à l’article. On y accède en choisissant l’item « python » dans la liste déroulante jaune ci-dessous :

L’éditeur Python n’apparaît que si on clique sur le bouton « Python » ou sur le curseur à sa droite : c’est un choix pédagogique permettant de ne pas complexifier inutilement l’ergonomie du logiciel pour un usage au collège.

B) Quelques activités

Exemple 1 : pair/impair

Ce premier exemple, pas fondamental évidemment, a pour but de faire découvrir le fonctionnement du logiciel aux élèves :

La traduction du programme par blocs (bouton Traduire) permet d’obtenir la syntaxe d’instructions Python pas forcément connues : « random.randint » et, à un degré moindre, « % ». Les 5 lignes de code ainsi crées sont ensuite à compléter par une instruction conditionnelle pour effectuer le test de parité demandé :

  1. import random
  2. n = random.randint(1, 10)
  3. print(n)
  4. reste = n%2
  5. print(reste)
  6. if (n==0) :
  7.         print "pair"
  8. else :
  9.         print "impair"

Télécharger

Evidemment, j’aurais pu ajouter un bloc « si_sinon » dans le programme par blocs initial, mais il faut quand même que les élèves apprennent Python pour respecter le programme officiel !

Plus généralement, quand je prône l’usage de la programmation par blocs (en Seconde particulièrement) pour faciliter l’apprentissage de Python, c’est avec un usage non systématique : il faut en effet tenir compte de paramètres tel que le nombres d’heures déjà effectuées en programmation Python, élèves en difficulté ou non...

Exemple 2 : tortue et drapeaux

Beaucoup de logiciels permettent de programmer avec une tortue. Le petit plus de ScratchGGB, grâce à Geogebra, est que l’on peut facilement vérifier le résultat à l’exécution : il sera correct si la trace de la tortue se superpose à la figure à reproduire (ici en rouge), et incorrect dans le cas contraire.

Voici le code Python fourni par le traducteur de ScratchGGB :

  1. from scratchggb import *
  2. forward(2)
  3. for count in range(4):
  4.         forward(1)
  5.         right(90)

Télécharger

J’ai peut-être un peu trop aidé les élèves en leur fournissant au départ un programme par blocs dessinant un drapeau, mais il leur reste quand même un travail algorithmique non négligeable à effectuer :

  • soit en imbriquant deux boucles, sans oublier de faire revenir la tortue à sa position de départ après le dessin d’un drapeau
  • soit en introduisant un sous-programme dessinant un drapeau, toujours en faisant revenir la tortue à sa position de départ, puis en l’utilisant dans une boucle

Exemple 3 : cercles concentriques

Comme je l’ai dit en introduction, j’ai complété par rapport à Pyggb l’offre en constructions géométriques : Midpoint, PerpendicularLine… Je le montre dans une des activités de la banque d’exercices de ScratchGGB (médiatrices), mais je vais opter dans cet article pour une activité plus algorithmique : dessiner, à l’aide d’une boucle, 5 cercles concentriques.

Le programme par blocs dessine le centre, ainsi que le plus petit des 5 cercles à reproduire. Après en avoir obtenu la traduction en Python, il est facile d’en déduire le code final suivant :

  1. from scratchggb import *
  2. A=Point(0,0)
  3. for rayon in range(2,7) :
  4.         Circle(A,rayon)

Télécharger

Exemple 4 : tableur

La traduction des blocs fournis au démarrage de l’activité donne les deux commandes Python à connaître pour communiquer avec le tableur de Geogebra : setCell (qui met une valeur dans une cellule) et getCell (qui récupère la valeur d’une cellule). La première information permet de répondre sans difficultés à l’énoncé :

  1. from scratchggb import *
  2. for k in range(1,11) :
  3.         setCell("A",k,2*k)

Télécharger

Bien évidemment, il faudrait aussi proposer aux élèves des exemples plus utiles : je laisse le soin de le faire à mes collègues de lycée, car ils connaissent les programmes officiels contrairement à moi… Néanmoins, je vais me risquer à une petite suggestion : pourquoi pas faire une simulation en Python et la poursuivre par un graphique avec le tableur de Geogebra ?

C) Conclusion

Le logiciel et la banque d’exercices prêts à l’emploi sont disponibles à cette nouvelle adresse, mon site professionnel étant supprimé à ma retraite. J’espère évidemment que ScratchGGB sera largement utilisé, que ce soit au collège (principal public ciblé) ou au lycée (surtout en Seconde)…

Annexe : nommage des objets géométriques

Dans son article sur PyGgb, Jean-Yves Labouche a commencé sa présentation du logiciel par cet exemple :

Ce code Python marche aussi avec ScratchGGB. Donc, si j’en parle, c’est pour une autre raison : le traducteur de blocs ne peut être utilisé correctement sans certaines précisions que je vais fournir.

Cela tient à la différence en matière de nommage des objets entre Geogebra (dont ScratchGGB s’est inspiré pour les blocs géométriques) et Python (version PyGgb ou version ScratchGGB). Pour l’expliquer le plus simplement possible, je vais comparer ces 3 versions censées dessiner les deux premiers cercles de l’exemple :

Comme on le constate, les résultats sont tous différents :

  • contrairement à ce qu’on pourrait penser, les instructions « P=(0,0) » et « P= (1,0) » ne sont pas des affectations à une variable nommée « P », mais un moyen d’indiquer le nom qu’on veut donner aux points ; comme il est impossible que 2 points aient le même nom, Geogebra déplace le point P initial à la position (1,0).
  • les blocs « Point » cherchent aussi à nommer les points « P », mais règlent d’une façon le conflit de nom pour le second point : un deuxième point est effectivement créé, mais il ne s’appelle pas « P » (c’est Geogebra qui fixe automatiquement le nom) et il n’y a donc pas de création du second cercle.
  • avec Python, les instructions sont de véritables affectations, la variable « p » récupérant le nom attribué automatiquement par Geogebra aux points créés ; c’est très pratique pour cet exemple, mais il y en a d’autres où le nom des points a de l’importance et c’est pour ça que je n’avais pas procédé de façon équivalente pour les blocs dans la version initiale de ScratchGGB

Pour traiter l’exemple des 4 cercles avec des blocs, il faut changer le nom des points à chaque passage dans la boucle, par exemple ici en P0, P1, P2 et P3 :

Mais si cette solution convient pour le collège, elle ne permet hélas pas la transition vers Python car le traducteur de ScratchGGB ne fonctionne pas correctement ici. Donc, comme je suis perfectionniste, j’ai créé un bloc (pas forcément indispensable) permettant d’avoir une équivalence entre Scratch et Python :