L’objectif de ce document est de présenter une activité qui permet d’introduire la programmation Python à partir du tableur. Elle a été faite en seconde sur plusieurs séances, en demi-groupe et en salle informatique. L’activité a été proposée au format numérique sur la plateforme Moodle du lycée. Elle aurait très bien pu être distribuée au format papier. L’essentiel était que les élèves soient autonomes et travaillent à leur rythme pour s’approprier au mieux les notions abordées. Un accès à Internet était permis. Cela leur permettait de chercher comment coder certaines fonctions tableur ou Python.
Pourquoi passer du tableur à Python ?
Ce sont deux utilisations complémentaires. Comme nous allons le voir, le tableur permet de décomposer les différentes étapes d’un calcul ou d’un programme tout en offrant la visualisation immédiate des résultats des fonctions utilisées. Cela aide les élèves à comprendre l’algorithme qu’ils ont à programmer en Python qui est plus performant que le tableur lorsque l’on veut simuler des échantillons de très grande taille.
Thème
Simulation d’une expérience aléatoire
Notions abordées
Voici une liste non exhaustive de notions abordées :
La fonction random et la création de nombres pseudo-aléatoires (distribution uniforme)
La fonction partie entière (sa définition et son utilisation)
Composition de fonctions
Création de la simulation d’une expérience aléatoire
Utilisation d’une simulation pour conjecturer des probabilités
Notion et observation de fluctuation de fréquences (loi des grands nombres)
De la moyenne d’une série statistique à la notion d’espérance mathématiques
Manipulation du tableur : utilisation du $, fonctions random(), ent(...), somme(...), nb.si(...;...), ...
Programmation Python : fonctions Python (procédure et fonctions), liste Python, fonctions floor(...) etrandom() , structure for (en donnant du sens à range(...) ), structure conditionnelle
Description
Dans cette activité, on souhaite étudier le nombre de filles dans les familles de 4 enfants.
On fait les hypothèses (1) suivantes :
Chaque naissance a autant de chances d’être celle d’un garçon ou celle d’une fille.
Le sexe d’un enfant d’une famille ne dépend pas du sexe des enfants précédents.
Population étudiée : Famille de 4 enfants Caractère étudié sur cette population : nombre de filles Événements élémentaires (résultats possibles) : le nombre de fille appartient à {0 ; 1 ; 2 ; 3 ; 4}
On souhaite simuler un très grand nombre de familles de manière à répondre aux questions posées par les élèves :
Quel est l’événement élémentaire le plus fréquent ?
Quel est l’événement élémentaire le plus probable ?
Quelles sont les probabilités des différents événements élémentaires ?
Quel est le nombre moyen de fille dans une famille de 4 enfants ?
Pour cela, on se donne comme objectif de remplir les tableaux suivants.
Résultats possibles
0
1
2
3
4
Somme
Effectifs
...
...
...
...
...
...
Fréquences
...
...
...
...
...
...
Pour construire cette simulation, on commence, dans un premier temps, par utiliser le tableur pour comprendre comment simuler, pour décomposer les différentes étapes et pour visualiser les résultats intermédiaires et les résultats finaux. Dans un deuxième temps, on utilise Python pour obtenir des échantillons de tailles de très grande taille et des résultats plus précis.
Les élèves ont à leur disposition une activité sous format numérique, un fichier tableur (à ouvrir par exemple avec libre Office) et un modèle de fichier Python (à ouvrir par exemple avec Pyscripter que l’on trouve dans la version portable de Python).
Les différentes étapes
L’activité a été faites sur plusieurs séances, en classe de seconde, en demi-groupe et en salle informatique.
Elle peut se décomposer en 6 étapes.
Etape 1 : Simulation d’une naissance
Avec le tableur :
Dans le premier onglet du tableur fourni (onglet Naissance), on recherche la formule qui permet de simuler une naissance, c’est à dire l’apparition aléatoire des mots « Fille » et « Garçon » en respectant les hypothèses (1) énoncées plus haut.
La formule à saisir dans la cellule D2 est :
Ceci étant fait, dans le deuxième onglet du fichier tableur, on recopie cette formule dans la cellule B2.
Avec Python :
En utilisant ce qui a été compris dans le tableur, on souhaite coder en Python la fonction Python qui permet de simuler une naissance. Pour cela on utilise les fonctions floor(…) de la bibliothèque math et random() de la bibliothèque random.
Etape 2 : Simulation d’un famille de 4 enfants
Avec le tableur :
Dans le deuxième onglet du fichier tableur, on copie la fonction découverte dans l’étape 1 dans les 4 cellules B2, C2, D2 et E2 pour simuler une famille de 4 enfants.
Avec Python :
On construit la fonction Python qui permet de simuler une famille de 4 enfants.
On introduit à cette occasion la méthode append(…) qui permet d’ajouter un élément à une liste.
Etape 3 : Calcul du nombre de filles dans une famille de 4 enfants
Avec le tableur :
Dans la cellule F2 on compte le nombre de filles dans la famille simulée dans la plage B2:E2. Pour cela on utilise la fonction =nb.si(...;...) en saisissant =nb.si(B2:E2;’’Fille’’)
Avec Python :
On introduit à cette occasion la méthode count(…) qui donne le nombre d’occurrence de la liste qui lui est passée en paramètre.
Etape 4 : Création d’un échantillon de plusieurs familles
Avec le tableur :
On fait un simple copier-coller. Dans notre cas, on a simulé 1000 familles.
Avec Python :
On souhaite construire la fonction qui permet de construire la colonne F du tableur, c’est à dire la liste du nombre de fille dénombrées dans les familles simulées.
On utilise, à nouveau, à cette occasion la méthode count(…) qui donne le nombre d’occurrence de l’élément passé en paramètre dans une liste.
Etape 5 : Tableau des effectifs et des fréquences
Avec le tableur :
Dans la plage H2:N4 on souhaite remplir le tableau des effectifs et des fréquences de notre simulation de taille 1000 comme proposé en page 1. Pour cela on doit compter le nombre de fois où les valeurs 0 puis 1, puis 2, puis 3, puis 4 sont contenues dans la plage F2:F1001. On utilise pour cela la fonction =nb.si(...;...) Dans la cellule I3 ,on écrit =nb.si($F2:$F1001;I2) Dans la cellule I4, on écrit =I3/$N3 Pour obtenir les sommes des lignes on utilise la fonction =somme(…:…) .
Avec Python :
On construit une fonction qui a comme paramètre une liste de nombres contenus dans l’ensemble {0 ; 1 ; 2 ; 3 ; 4}. Cette fonction compte le nombre de fois où les valeurs 0, puis 1, puis 2, puis 3, puis 4 apparaissent dans une liste passée en argument. C’est l’occasion d’utiliser à nouveau count(…).
#Fonction Python qui crée l’affichage des effectifs des événements élémentaires
Remarque importante :
La structure for i in range(5): permet de répéter 5 fois les instruction qu’elle contient mais attention, en fait, la variable i définie par cette instruction prend les valeurs 0, 1, 2, 3 et 4 car range(5) est la liste {0;1;2;3;4}.
#Fonction Python qui crée l’affichage des fréquences des événements élémentaires
Etape 6 : Calcul de la moyenne de la série
Dernière étape, on souhaite calculer la moyenne de la série statistique obtenue dans l’étape 5. C’est à dire le nombre moyen de filles.
Avec le tableur :
Quatre méthodes sont proposées :
Méthode 1 : on calcule la moyenne de la liste contenue dans la colonne
F =MOYENNE(F2:F1001)
Méthode 2 : on calcule la moyenne de la liste contenue dans la colonne
F =SOMME(F2:F1001)/N3
Méthode 3 : on utilise la formule de la moyenne
=(I3*I2+J3*J2+K3*K2+L3*L2+M3*M2)/N3
Méthode 4 : après avoir démontré le résultat, on utilise la formule utilisant les fréquences
=I4*I2+J4*J2+K4*K2+L4*L2+M4*M2
Cette dernière méthode permet d’introduire la formule de l’espérance mathématiques lorsqu’on travaille avec le tableau de la loi de probabilité de l’expérience aléatoire.
Dans les trois cas on obtient une valeur proche de 2.
Avec Python :
On utilise la méthode 2. On crée une fonction qui prend une liste en paramètre (la liste des données dont on veut faire la moyenne) et qui renvoie la valeur de la moyenne
Bilan
Avec le tableur, on peut travailler avec des échantillons de taille 1000 (c’est le cas dans notre exemple) ou de taille 5000 ou encore de taille 10000. Au delà, on constate que les copier-coller des formules sont de plus en plus pénibles et que les calculs se font moins rapidement.
Avec Python, on peut obtenir des simulations pour des échantillons de tailles 106 voir même de taille 5 106 .Au delà les résultats mettent plus de temps à s’afficher mais travailler avec un échantillon de taille 5 106 est déjà largement suffisant !
Avoir utilisé le tableur avant de programmer en Python a permis aux élèves de visualiser les objets qu’ils avaient à utiliser dans leur programme Python. Par exemple, dans l’étape 2, le tableur permet de voir le contenu de la variable listeEnfant de Python. Même chose dans l’étape 4, pour la liste listeNbFille de Python que l’on observe dans le tableur dans la colonne F. Dans l’étape 3, le tableur permet de comprendre ce que compte la fonction nbFille(…).
L’utilisation en parallèle du tableur et de Python permet aussi de mieux comprendre la structure répétitive bornée for comme le montre le tableau ci-dessous.
Dans l’étape 2 les lignes de code
se traduisent dans le tableur par un simple copier-coller
Dans l’étape 5 les lignes de code
dans lesquelles la variable i est utilisée permettent de comprendre qu’il ne s’agit pas seulement de répéter 5 fois les instructions qu’elle contient mais que i prend les valeurs 0, 1, 2, 3 et 4.
Dans l’étape 6, les lignes de code
peuvent être expliquée en demandant aux élèves de calculer de tête la somme des valeurs contenues dans la plage F2:F1001 ! Ils comprennent très vite le principe d’hérédité utilisé dans le code Python. Lorsqu’on en est à la n+1 ième ligne du tableau, on doit ajouter la valeur de la n+1 ième ligne à la somme des valeurs des n premières lignes.
Cette activité est l’occasion de faire constater aux élèves que :
pour 2 échantillons de même taille la fréquence d’un événement, {« 1 Fille par famille »} par exemple, fluctue autour de 0,25
plus la taille de l'échantillon augmente moins cette fluctuation est importante.
si on fait tendre la taille de l'échantillon vers , alors la fréquence de l'évènement {« 1 Fille par famille »} tend vers 0,25 qui est la « fréquence théorique » ou la probabilité de l'évènement. Cette propriété est appelée la loi des grands nombres.
Après toutes ces simulations, on peut demander, dans un premier temps, aux élèves de conjecturer les probabilités de chaque événements élémentaires puis, dans un deuxième temps, de modéliser la situation à l’aide d’un arbre pondéré pour construire la loi de probabilité et ainsi vérifier leurs conjectures.