boucles statiques
On peut donc affecter une variable avec une boucle :
boucle=range(1,9)
for compteur in boucle:
print('La valeur actuelle du compteur est ',compteur)
Ce qui permet de manipuler algorithmiquement des intervalles d’entiers avec des choses comme ceci :
print(list(range(8))
print(3 in range(5))
Le TP a servi essentiellement à rappeler les notions suivantes :
- Tableau de valeurs d’une fonction (en bas de la première page)
- Diagramme en bâtons des effectifs
- Tableur (pour la comparaison)
Le sujet est ici :
Mais peu d’élèves ont pu faire le TP à cause d’une panne de réseau, et aucun élève ne semble savoir se servir d’un tableur pour simuler le hasard ; en particulier, les fonctions ALEA.ENTRE.BORNES et NB.SI leur étaient totalement inconnues.
Module « tortue »
Pour illustrer les boucles, l’exemple archiclassique des polygones réguliers a été choisi, parce qu’il est graphique et permet d’introduire le module « tortue » de Python. Le TP a servi aussi de révisions sur les coordonnées (Python sait lire celles de la tortue) et la géométrie du triangle (la réciproque de Pythagore et la trigonométrie étaient nécessaires pour la dernière question). En voici le sujet :
Malgré la simplicité de l’énoncé, les élèves font preuve d’une extraordinaire imagination pour faire des erreurs totalement imprévues :
Fonctions
En fait, le module « tortue » permet très facilement de représenter des fonctions, au point que la seule vraie difficulté est le tracé des axes :
Certains élèves manquent cruellement de sens de l’orientation, ce qui donne des résultats parfois comiques et pas toujours proches de l’effet escompté...
Écriture de la fonction V
9 élèves ont écrit « 5 » comme fonction (sans doute parce qu’ils ont vu le « 5 » de l’axe des abscisses sur le graphique de l’énoncé et qu’ils ne savaient pas quoi mettre d’autre). Cette erreur est exploitable sous la forme d’un rappel : La représentation graphique d’une fonction constante est une droite horizontale.
Voici quelques tentatives :
from math import *
def V(x):
y=forward(4/3000)
y=y*pi
y=y*x**3
return y
(l’idée de décomposer la fonction en plusieurs étapes simples est plutôt bonne algorithmiquement parlant, même s’il était parfaitement possible de n’écrire la fonction qu’en une ligne, ce qu’ont d’ailleurs fait les meilleurs élèves [1])
Variante qui montre mieux les hésitations :
from math import *
def V(x):
y=froward(4/3000)
y=pi+y
return y
qui pourrait bien être copié sur la voisine :
from math import *
def V(x):
y=forward(4/3000)
y=pi+y
y=y*x*3
return y
Graduations
En fait, il y a une erreur dans l’énoncé, un left ayant malencontreusement pris la place d’un right. Ce qui a constitué un test pour la découverte d’autres méthodes, voire des angles négatifs. Finalement
- 24 élèves ont barré le left fautif et mis un right(90)
- 5 élèves ont trouvé que left(270) avait le même effet qu’une rotation vers la droite (espérons que ces 5 là seront à l’aise en trigonométrie lorsqu’il faudra réinvestir cela)
- 4 élèves ont maintenu un left(90) qui dessine un petit carré au lieu de l’axe gradué.
Statistique sur les coups de tampon
Python donne à chaque coup de tampon (stamp()) un numéro, qu’IDLE affiche parfois. Ce numéro change au cours du TP, et n’est pas le même chez tous les élèves. Voici le résultat d’un comptage partiel de ces numéros :
numéros | effectifs |
6 | 11 |
7 | 1 |
8 | 4 |
9 | 2 |
10 | 7 |
12 | 1 |
14 | 3 |
17 | 1 |
18 | 1 |
20 | 1 |
21 | 1 |
34 | 1 |
41 | 1 |
Un modèle par loi de Poisson paraît assez bon, sauf que les valeurs paires sont plus fréquentes et que les valeurs faibles (inférieures à 6) sont absentes.
Commentaires