Un TP de cape et d’épée avec le Chevalier de Méré

vendredi 28 octobre 2011
par  Alain BUSSER

Dans la correspondance entre Blaise Pascal et Pierre de Fermat, le premier évoque des problèmes que lui ont soumis Antoine Gombaud, chevalier de Méré, notamment le fait que des probabilités qui lui étaient connues, étaient proches de 0,5 mais pas exactement égales à 0,5.

La première des deux se prête assez bien à un TP en Seconde (seule la fin nécessite un langage objet comme Python) :

le sujet du TP en pdf
TP Python sur le premier problème soumis à Blaise Pascal par le Chevalier de Méré

Le TP a très bien commencé, avec ce raisonnement :

Le total des faces des 4 dés est 24, et 4 d’entre elles sont gagnantes (avec un 6 dessus) ; donc la probabilité d’avoir au moins un 6 est de 4 chances sur 24, soit une chance sur 6.

La bonne nouvelle, c’est que beaucoup d’élèves perçoivent bien les probabilités comme des fractions... La fluctuation d’échantillonnage ressort bien de cette activité, une élève ayant eu 9 tirages gagnants sur les 10 (ça devait être son jour !) et deux élèves ont eu 0 partie gagnante.

Voici quelques erreurs intéressantes :

  • Les élèves ont, en général, du mal à verbaliser l’acte de compter les « True » dans la liste (à la question « comment as-tu trouvé que l’effectif est 6 ? » ils ne savent souvent pas du tout répondre) [1] ; une fois qu’ils ont compris qu’ils avaient juste compté les « True », ils ont certes eu du mal à trouver comment faire ce comptage en Python, malgré la présence d’un exemple de comptage auparavant...
  • Plusieurs élèves ont mis count(6) au lieu de count(True) à la fin ;
  • Beaucoup d’élèves ont entré count(true) au lieu de count(True) et n’ont pas réussi à retrouver la source de leur erreur, bien que la question précédente leur aie rappelé la syntaxe des booléens dans Python ;
  • Un élève a oublié de citer la liste à compter, avec count(True) au lieu de liste.count(True). Ce genre d’erreur est facile à remédier.
  • Environ la moitié de la classe a oublié de diviser le nombre de « True » par l’effectif total, d’ailleurs plusieurs élèves ont cherché comment on écrit « fréquence » en Python, et ont été très déçus que Python n’ait pas d’instruction réservée au calcul de fréquences (mais que fait Guido van Rossum ?) ; la notion de fréquence est en général mal maîtrisée à l’entrée en Seconde...

Aucun élève ne semblait connaître la notion d’erreur d’approximation. Dommage, parce qu’avec 10000 lancers, la fluctuation d’échantillonnage est assez faible :

effectif erreur
5190 0,25 %
5170 0,13 %
5262 1,64 %
5289 2,16 %
5140 0,71 %
5200 0,44 %
5088 1,72 %
5269 1,78 %
5168 0,17 %
5180 0,06 %
5115 1,2 %
5218 0,79 %
5126 0,99 %

En effet, l’écart-type étant de l’ordre de 0,5 %, l’intervalle de confiance au niveau 95% pour l’effectif de parties gagnantes est [5127 ;5227] auquel appartiennent 10 des 13 données des élèves [2].

Ce TP est très facile à porter sur tableur, mais la mise en œuvre est moins facile qu’avec Python, essentiellement parce que les élèves ne connaissent pas du tout le tableur, et que la recherche du « critère » dans le « NB.SI » n’est pas évidente.

Malgré ça, aucun élève n’a eu le temps de calculer la probabilité du (III) ; un seul a eu le temps de compléter l’univers omega.


[1Pour y remédier, une narration de recherche leur a été confiée, sur le calcul approché de $\sqrt{3}$ ; en effet, annoncer aux élèves que la note ne portera que sur la rédaction les motive à faire plus d’efforts pour ladite rédaction.

[2soit les trois quarts : On est largement en-dessous des 95% attendus !


Commentaires

Logo de Alain BUSSER
jeudi 22 mars 2012 à 21h57 - par  Alain BUSSER

Merci pour cette analyse très pertinente des difficultés levées par cet atelier. J’interprète l’introduction de l’algorithmique dans les programmes de maths, comme une incitation à habituer les élèves très tôt à la notion d’itération (calcul séquentiel). Cette notion est difficile et a priori, des outils comme Python, Xcas ou SciLab, avec la possibilité de manipuler des listes et leur préimplémentation d’algorithmes de tri, de somme, etc. permettent de court-circuiter cette difficulté. En résumé, cet atelier Python me laisse l’impression

  1. d’être totalement hors programme du point de vue algorithmique (parce qu’axé sur de la programmation rarement séquentielle), en tout cas en Seconde, où je prive les élèves du plaisir de la découverte d’un algorithme en mode pas-à-pas ;
  2. mais d’être un accélérateur de cours de mathématiques, en permettant d’exposer rapidement et « concrètement » des notions comme les ensembles (qu’on manipule en probabilités, en résolvant des équations et inéquations, avec les ensembles de définition) ou les relations entre lesdits ensembles.

Sur l’intérêt d’enseigner la programmation objet (hors programme) j’ai trouvé cet article ; sur la programmation, celui-ci ; sur le confort que permet la description d’un problème (plutôt que la description de la manière de le résoudre) en mathématique, celui-là. Bonne lecture !

Logo de Sébastien Hoarau
jeudi 22 mars 2012 à 10h41 - par  Sébastien Hoarau

J’ai regardé avec grand intérêt vos TP d’algorithmique en Python. Toutefois, je pense que vos TP sont plus orientés « manipulations de concepts mathématiques par des outils python ». Je pense notamment au TP sur les opérations ensemblistes (très peu utilisée la structure d’ensemble en programmation, on lui préfère largement celle de tableau ou de liste).

D’autre part, vous dites vous même que les élèves font assez peu d’algorithmique. Dans ce TP ci par exemple plutôt que de leur donner des expressions syntaxiquement et sémantiquement très difficiles : [randint(1,6) for i in range(4)].count(6) !!!!! Peut-être leur apprendre quelques méthodes sur les listes (le .count et le .append par exemple) et leur faire construire par une vraie boucle 10 fois la liste des 4 lancés... genre :

lesQuatresDes = [ ]
for n in range(10) :
\t lesQuatresDes.append(randint(1,6))
\t print(lesQuatresDes.count(6))

Les itérateurs sont assez compliqués à comprendre à l’intérieur d’une liste je trouve et surtout très spécifique à Python. Dans une initiation à l’algorithmique il vaut mieux s’en tenir à des choses plus génériques et que l’on est susceptible de retrouver dans d’autres langages. Mais je peux me tromper, je n’ai aucune expérience de ce genre de public :)