THEME 3 : PROBABILITES ET STATISTIQUES

Pour chaque exemple, la partie B ne doit être fournie aux élèves qu’après avoir traité complètement la partie A correspondante. Les deux premiers exemples pourraient être proposés en débranché mais l’utilisation de l’outil informatique pour implémenter les programmes semble s’imposer pour donner sens à la simulation des expériences aléatoires. Les notions mathématiques nécessaires peuvent ici parfois faire obstacle à l’acquisition de connaissances informatiques sur Python. Dans ces activités, la programmation se met au service des mathématiques pour appréhender les probabilités à travers une approche statistique.

Ce premier exemple permet d’introduire le langage algorithmique à partir d’un programme Scratch. Il propose un rappel sur les notions de variables, d’affectation et de gestion de sorties et leur traduction en algorithme.
En informatique, les variables d1, d2 et somme ne seraient pas utilisées : le programme se résumerait à faire afficher directement la somme des deux nombres aléatoires entre 1 et 6. Ici, le programme proposé permet de coller davantage à la situation réelle du lancer de deux dés pour calculer ensuite la somme des résultats obtenus.

La traduction de l’algorithme en langage Python ne présente pas de difficultés particulières si ce n’est l’introduction de la bibliothèque « random » et de l’instruction « fromimport … » nécessaire pour disposer de la fonction « randint ». Un travail peut alors être engagé autour des bibliothèques et des fonctions prédéfinies.  
Le programme Scratch proposé présente la saisie d’un entier en deux briques et utilise une structure conditionnelle. La distinction des deux types de variables utilisées (entier et chaîne de caractères) apparaît dans la déclaration des variables dans le langage algorithmique et la saisie de l’entier décliné en deux briques sous Scratch est traduite en une seule ligne. Ce travail prépare le passage à Python présenté dans la partie suivante.

Les difficultés liées à la gestion des entrées et au typage de variable ont été abordées à travers le langage algorithmique. Cependant deux difficultés subsistent encore pour traduire l’algorithme en langage Python : l’imbrication de deux fonctions dans la gestion de la saisie (« int » et « input ») et l’indentation des lignes de codes pour traduire le début et la fin de la structure conditionnelle. L’absence du « alors » (traduit par « : » et l’indentation de la ligne suivante) est également à pointer.  
Cette première partie introduit la nécessité de faire appel, dans l’algorithme puis en Python, à une variable pour compter le nombre de tours dans une boucle bornée contrairement au « répéterfois » de Scratch. L’enseignant doit également insister sur l’incrémentation automatique de cette variable à chaque tour de boucle. L’imbrication d’une structure conditionnelle à l’intérieur de la boucle bornée est visible sous Scratch avec l’utilisation des pinces. Elle devient déjà plus délicate à percevoir dans l’algorithme.

Les difficultés liées à l’écriture et au fonctionnement d’une boucle bornée ayant déjà été pointées lors du passage de Scratch au langage algorithmique, ne subsiste ici que la prise en compte d’une double indentation nécessaire pour programmer la structure conditionnelle incluse dans la boucle bornée. Dans ce programme, la variable compteur n’est pas reprise dans la boucle.
Les questions 2 et 3 peuvent déboucher sur un travail mathématique autour des statistiques et probabilités en faisant varier le nombre cible et le nombre de lancers effectués. L’objectif final peut être de déterminer les probabilités des différentes issues à partir d’un arbre des possibles.
Cet exemple peut également servir pour travailler les fonctions informatiques. On peut ainsi définir une fonction somme() sans paramètre pour obtenir le résultat. Cette fonction peut ensuite être reprise pour définir une nouvelle fonction à un paramètre effectif(nombre_cible). On peut ensuite définir la fonction fréquence(nombre_cible, nombre_lancers) à deux paramètres. En exécutant une seule fois le programme obtenu, on peut ainsi obtenir différentes fréquences en faisant varier les deux paramètres de la fonction.
 
Ce dernier exemple porte sur la boucle non bornée traitée dans les trois langages. Le passage du « répéter jusqu’à … » au « Tant que » est délicat et un travail autour de la logique mathématique est nécessaire. Un changement de point de vue s’impose également : dans Scratch, l’arrêt est déclenché lorsque la condition devient vraie tandis qu‘avec le « Tant que » la condition doit être fausse pour sortir de la boucle.

Le passage de l’algorithme au script Python ne pose pas de difficultés particulières, mis à part le problème récurrent de l’indentation. La question 2, par contre, risque d’être complexe à traiter par les élèves. En effet, la condition pour qu’on reste dans la boucle tant qu’on n’a pas obtenu un double 6 est délicate à déterminer : il faut que l’élève définisse la négation de la proposition « j’ai obtenu un double 6 » ou en terme informatique « not(d1 ==6 and d2==6) » ou « not(d1==d2==6) » ou encore en travaillant la logique mathématique « d1!=6 or d2!=6 ».  

 

Il est possible de récupérer l'intégralité de ces quatre exemples ici :