SofusPy, une passerelle entre programmation visuelle et Python

mardi 6 juin 2017
par  Alain BUSSER , Patrick RAFFINAT

Cet outil permet

  • de programmer par blocs, comme avec Scratch mais en ligne ;
  • de programmer en Python (langage) en ligne ;
  • d’engendrer automatiquement le code Python à partir des blocs.

Cette passerelle entre Sofus (les blocs) et Python (le « code ») s’inscrit donc pleinement dans les programmes apparus en Seconde à la rentrée 2017.

A) Introduction

SofusPy est une extension mathématique de Blockly hébergée par l’IREM de la Réunion, tout comme l’extension tableur évoquée à la fin de l’article. Ces deux extensions sont accessibles à partir d’une page web créée pour l’occasion : http://irem.univ-reunion.fr/blockly.... SofusPy peut aussi être utilisé localement sans connexion à internet, contrairement à l’extension tableur qui communique avec un serveur.

Zip - 893.5 ko
Installation locale de SofusPy

SofusPy reprend plusieurs caractéristiques fondamentales de Sofus (voir article) : des blocs pour transformer des variables (augmenter/diminuer, augmenter/diminuer d’une proportion...), des blocs pour manipuler une ou plusieurs tortues... Sa nouveauté est l’ajout d’un traducteur vers Python, ainsi que d’un interpréteur Python (Skulpt), ce qui permet de faciliter l’apprentissage de Python pour des élèves formés à la programmation par blocs au collège.

B) De Sofus vers Python

Exercice 1

Après avoir augmenté de 20%, le prix d’un article diminue de 10%. Est-il vrai que l’augmentation globale de son prix est 10% ?

Pour vérifier ou infirmer cette hypothèse, on peut écrire le programme suivant :

Le prix initial de l’article est arbitrairement fixé à 80 €, mais il peut facilement être changé grâce à une variable nommée « prix ». Pour introduire cette variable et lui affecter une valeur, on peut procéder ainsi :

  • cliquer sur le menu Variables, puis choisir le bloc « fixer element à » et l’amener sur le plan de travail.
  • cliquer sur le nom « element » de la variable, puis choisir « créer une variable » et nommer celle-ci « prix ».
  • cliquer sur le menu Math, afin de sélectionner le bloc représentant les constantes (initialement 0) et de l’attacher au bloc « fixer ».
  • remplacer la constante 0 par 80

Les deux blocs suivants, permettant d’augmenter et de diminuer la variable d’un pourcentage, illustrent l’apport de Sofus par rapport à la version standard de Blockly. Ils sont disponibles dans le sous-menu sofus du menu Math. Le dernier bloc, qui affiche la valeur de la variable « prix », est disponible dans le menu Entrées-sorties.

Il ne reste plus qu’à exécuter le programme (bouton Exécuter) qui affiche alors « 86.4 ». Ceci donne la réponse au problème : l’augmentation globale n’est pas de 10%, car sinon l’affichage serait 88 €.

On aurait aussi pu faire la vérification en transformant le programme Blockly en un programme Python :

  • cliquer sur le bouton Editeur, ce qui fait apparaître la traduction Python dans un éditeur de texte et masque le programme Blockly
  • cliquer sur le bouton Exécuter

Pour faire réapparaître le programme Blockly, il suffit de cliquer sur le bouton Blockly. Mais attention : si vous avez modifié le programme Python sans le sauvegarder, vous le perdrez.

Voici le code Python engendré :

prix = None
element = None
prix = 80
prix = prix + prix * 20 / float(100)
prix = prix - prix * 10 / float(100)
print(prix)

Amélioration du code Python :

0n peut non seulement exécuter le code Python, mais aussi le modifier : « C’est en pythonnant qu’on devient Python », dit un vieux proverbe Jedi !

Voici une amélioration possible du script précédent :

prix = 80
prix = prix + prix * 20 / float(100)
prix = prix - prix * 10 / float(100)
print(prix)

La conversion de l’entier 100 en réel est nécessaire pour l’interpréteur Python, qui implémente Python 2 : en effet, l’expression 20/100 serait évaluée à 0 (division entière), contrairement à Python 3 qui l’évalue à 0.2 (division réelle). Si vous n’appréciez pas la notation float(100), vous pouvez la remplacer par 100.0

Exercice 2

Est-ce que 50 augmentations successives de 1% donnent une augmentation globale

de 50% ?

de moins que 50% ?

de plus que 50% ?

Pour répondre à cette question, on peut fixer le prix initial à 100 €, puis répéter 50 augmentations de 1% à l’aide d’une boucle :

L’exécution du script montre que l’augmentation globale est d’environ 64,46% et le script Python obtenu, une fois épuré des premières lignes superflues, montre la syntaxe des boucles dans Python :

prix = 100
for count in range(50):
    prix = prix + prix * 1 / float(100)
print(prix)

De quel pourcentage doit-on alors augmenter 50 fois de suite un prix, pour que l’augmentation globale soit 50% ? Il est facile de remplacer dans le script Python 1 par d’autres nombres, jusqu’à ce que le résultat affiché soit proche de 150 € (au centime près par exemple).

Intégrale

Cet exercice s’inspire du Capes 2017 : l’aire d’un quart de disque est égale à l’intégrale ∫01√(1-x²)dx.

Cela fournit un moyen de « calculer π » : on multiplie par 4 cette intégrale, après avoir évalué celle-ci par la méthode des rectangles. Cela permet également de montrer comment on programme une fonction dans Blockly ou dans Python.

Définition de la fonction avec Blockly

Il y a dans le menu Sous-programmes un bloc permettant de définir une fonction [1]. Après l’avoir introduit dans le plan de travail, il faut cliquer sur la roue dentée et ajouter un paramètre que nous nommerons « t » (et pas « x » [2]) :

Un nouveau clic sur la roue dentée permet de fermer la bulle. Pour finir, on fabrique une expression algébrique en cherchant et assemblant des blocs du menu Math, et on greffe cet arbre sur l’entrée « retourner » :

Utilisation de la fonction avec Blockly

La définition de la fonction « f » fait apparaître dans le menu Sous-programmes un nouveau bloc (« f avec t ») qu’il faut glisser dans le programme implémentant la méthode des rectangles :

Pour calculer l’intégrale de f entre 0 et 1 :

  • on initialise la variable x à 0 (borne inférieure de l’intégrale) ;
  • on initialise I (variable représentant l’intégrale) à 0 ;
  • on boucle jusqu’à ce que x dépasse 1 (borne supérieure de l’intégrale) ; dans cette boucle :
    • on augmente I de f(x)×dx, et
    • on augmente x de dx.

En fait, dx est une constante mais elle est traitée ici comme une variable (histoire qu’elle ait un nom). Il ne reste plus qu’à quadrupler l’intégrale à la fin pour calculer une valeur approchée de π.

Python

L’export en Python donne ce script (une fois un peu allégé) :

import math
def f(t):
    return math.sqrt(1 - t ** 2)
dx = 0.0025
x = 0
I = 0
while not x >= 1:
    I = I + f(x) * dx
    x = x + dx
print(I * 4)

Maintenant on peut relancer le programme après avoir changé la valeur de dx, pour voir l’effet produit sur la vitesse d’exécution et la précision.

On peut comparer avec ce TP qui a été donné, sur ce sujet, en première année de BTS SN :

PDF - 91.6 ko

Et, « pour aller plus loin », on peut modifier le script pour qu’il utilise le module decimal et calcule sur un plus grand nombre de chiffres. Mais on ne peut pas l’exécuter avec l’interpréteur Python de SofusPy, car il ne gère pas ce module.

Spirale

Sofus et Python ont autre chose en commun : la tortue.

Voici comment celle de Sofus peut dessiner une spirale logarithmique :

L’export en Python donne ce script (une fois un peu allégé) :

from turtle import *
reset()
L = 40
for count in range(200):
    left(15)
    forward(L)
    L = L - L * 5 / float(100)

Si on exécute le programme par blocs, l’affichage de la spirale est instantané alors qu’on voit la tortue se déplacer en exécutant le code Python.

C) Une autre extension disponible : tableur Xcas

Il est aussi possible d’utiliser des transformations Sofus dans l’extension tableur Xcas, une autre extension hébergée par l’IREM de la Réunion. Cette extension [3], composante de la suite logicielle Mathém@ALGO, a été isolée afin d’en simplifier l’ergonomie et d’en faciliter la diffusion.

Elle propose des blocs permettant de lire et d’écrire dans un tableur. Le bouton Demo permet d’en télécharger un exemple caractéristique, qui calcule la moyenne de données stockées dans le tableur. Un plus de la version hébergée par l’IREM de la Réunion est qu’on peut en obtenir la traduction en Javascript (bouton Editeur) et ainsi faciliter l’apprentissage de ce langage, y compris avec des applications interagissant avec le tableur.

Cette extension peut également être utilisée pour combiner Blockly et calcul formel (voir article).


Pour aller vers SofusPy, cliquer sur le QR-code ci-dessous (ou le flasher) :


[1En fait il y en a 2, mais un seul « retourne » une valeur, et c’est ce qu’est censé faire une fonction. L’autre est une procédure.

[2On aura besoin, tout-à-l’heure, d’une variable nommée « x », pour calculer l’intégrale par la méthode des rectangles.

[3L’extension Xcas a déjà été décrite ici et (dans les deux cas, à la fin de l’article)


Commentaires

Navigation

Articles de la rubrique

  • SofusPy, une passerelle entre programmation visuelle et Python

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 11 octobre 2017, 14h-18h, campus du Tampon
- Mercredi 22 novembre 2017, 14h-18h, campus du Tampon
- Mercredi 7 février 2018, PTU, Saint-Denis, salle S23.6
- Mercredi 7 mars 2018, 14h-18h, campus du Tampon
- Mercredi 4 avril 2018, PTU, Saint-Denis, salle S23.6
- Mercredi 2 mai, 14h-18h, campus du Tampon
- Mardi 5 juin 2018, PTU, Saint-Denis, salle S23.6
- Mercredi 6 juin, 14h-18h, campus du Tampon

Fête de la science

Du 13 au 18 novembre 2017.
Thème : « La recherche à l’heure du numérique »

Semaine des mathématiques

Du 26 au 31 mars 2018.
Thème : « Mathématiques et mouvement »


Brèves

Décès de Roger Mohr

mardi 27 juin

On sait bien que Nicolas Bourbaki n’était pas le nom d’une personne mais le pseudonyme d’un groupe. L’équivalent en informatique théorique est Claude Livercy, auteur de la théorie des programmes. Roger Mohr était un des membres de Claude Livercy.

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

L’algorithmique à l’IREM de Lille

vendredi 26 juin 2009

Le groupe AMECMI de l’IREM de Lille vient de mettre en ligne des ressources importantes au service des professeurs de Seconde :

- Algorithmique et programmation (Emmanuel Ostenne)
- Bibliographie amoureuse de l’algorithmique (Alain Juhel)

Statistiques

Dernière mise à jour

dimanche 22 octobre 2017

Publication

772 Articles
Aucun album photo
133 Brèves
11 Sites Web
132 Auteurs

Visites

673 aujourd'hui
782 hier
2133142 depuis le début
35 visiteurs actuellement connectés