TP Python n° 1

jeudi 1er septembre 2011
par  Alain BUSSER

Au collège, si on en croit les derniers sujets du DNB, une assimilation est suggérée entre les notions de « programme de calcul » et de fonction numérique (dans les deux cas, il y a un nombre à l’entrée, et un nombre à la sortie). Une fonction qui peut être utile pour la suite est celle qui arrondit un nombre à deux décimales.

Le problème avec Python est qu’une telle fonction existe déjà, par exemple on peut faire

from math import pi
print(round(pi,2))

Pour permettre aux élèves de choisir quand même Python, il leur a donc été demandé plutôt de créer une fonction tronc2 qui, au lieu de l’arrondi à deux chiffres, donne la troncature :

sujet du TP au format pdf

Du coup, l’interdiction d’utiliser la calculatrice était une erreur, puisque si la calculatrice affiche les arrondis à deux chiffres, elle ne le fait pas pour les troncatures.

Le programme d’algorithmique de Première (« objectifs pour le lycée ») commence par

Instructions élémentaires (affectation, calcul, entrée, sortie)

et donne pour exigibles, entre autres :

- d’écrire un programme calculant et donnant la valeur d’une fonction ;

- ainsi que les instructions d’entrées et sorties nécessaires au traitement.

En plus, l’écriture de l’algorithme comme une fonction (avec une entrée et une sortie) présente l’avantage de faciliter le test de l’algorithme en appliquant (« map ») la fonction à une liste d’antécédents :

list(map(tronc2,[13*n/7 for n in range(5)]))

L’impossibilité de définir algorithmiquement une fonction avec Algobox est, de ce point de vue, une gêne ; cependant, tous les élèves ont eu des difficultés à comprendre que le « résultat » de l’algorithme doit être dépendant de son « entrée », que celle-ci soit imposée au moment du test de l’algorithme (Algobox et la calculatrice), ou par un appel à une fonction définie préalablement (Python et JavaScript). Une solution à ce problème pourraît être l’engagement direct permis par le tableur et son langage « BASIC »...


Des difficultés imprévues sont vite apparues :

Sous Algobox, c’est le test de l’algorithme qui effraye un peu au début, comme en témoignent ces erreurs d’élèves :

Sous Python, c’est la nécessaire rigueur de la syntaxe qui déroute (ici il fallait ajouter une ligne vide pour finir la définition de la fonction, et utiliser « print » en mode interactif) :

Les élèves ont besoin de se familiariser avec l’outil [1] et ont donc d’abord testé ledit outil (ou plusieurs d’entre eux parfois) avec les fonctions identité et constantes (comme on le voit ci-dessus avec l’exemple Python).


Seuls les meilleurs élèves [2] ont pensé à la fonction partie entière, sans toutefois réussir à trouver comment la modifier pour arriver à deux décimales. La difficulté du problème, déjà constatée lors de ce TP de fin d’année, semble se confirmer là aussi.

Moins de la moitié est partie sur une idée spontanée et assez intéressante : Essayer d’élever x à la puissance 2 ou -2 [3].

Vers une évaluation par compétences

Les compétences visées étaient

  1. la capacité à démarrer l’ordinateur et le logiciel (2 points)
  2. l’entrée d’une donnée numérique (2 points)
  3. l’affichage ou la sortie du résultat du calcul (2 points)
  4. la capacité à tester l’algorithme (2 points)
  5. penser à utiliser la troncature entière (4 points)
  6. penser à la multiplication par 100 (4 points)
  7. penser à la division (4 points)

Ce qui donne une note sur 20, dont voici le diagramme en bâtons :

Avec une moyenne de 8,5 ce TP n’est pas vraiment « réussi » mais en écoutant les élèves, on se rend compte que la notion de fonction, bien qu’évaluée au DNB, est très peu maîtrisée en entrant en Seconde [4].

Exercice d’arithmétique :

Sachant qu’il faut 5 secondes de moins pour lire un algorithme Python que pour lire un algorithme écrit dans un autre langage que Python, et qu’un prof est amené à lire en moyenne 5 fois l’algorithme de chaque élève au cours du TP, combien de temps gagne-t-il pour évaluer une classe de 36 élèves au cours du TP ?

Le fait que la moitié des élèves ait choisi Python, n’est donc peut-être pas totalement étranger à la possibilité de remplir la grille d’évaluation par compétences au cours du TP, et donc que les élèves aient leur note dès la fin de celui-ci...


[1ce qui est compréhensible, mais pas habituel pour un utilisateur de CaRMetal dont la prise en mains est plus immédiate ; mais même dans ce cas, les élèves préfèrent utiliser le clavier plutôt que la souris...

[2catégorie apparemment très féminisée, pour la troisième année consécutive

[3et quelques-uns ont pensé à la multiplication par 100 ce qui est déjà un grand pas vers la solution !

[4cela est également vrai pour les redoublants...


Commentaires

samedi 10 septembre 2011 à 19h10

Une fonction sans boucles ne serait plus une fonction ??

Ce qu’il y a de certains :

- ce sont vos aprioris systématiques contre algobox (pourquoi vous ne montrez pas les erreurs des élèves faites avec d’autres logiciels comme carmetal qui est pourtant 10 fois plus dur d’accès aux élèves ?)
- c’est que 80% des activités que vous proposez sont complètement hors-programme (le tout habillé d’un baratin très approximatif sur divers langages de programmation pour faire savant)

Pour rappel, les seules exigences en algorithmique pour tout le cursus au lycée :

Les élèves, dans le cadre d’une résolution de problèmes, doivent être capables :
- d’écrire une formule permettant un calcul ;
- d’écrire un programme calculant et donnant la valeur d’une fonction ;
- de programmer un calcul itératif, le nombre d’itérations étant donné ;
- de programmer une instruction conditionnelle, un calcul itératif, avec une fin de boucle
conditionnelle.

Affectation, entrée, sortie, boucle (avec arrêt conditionnel ou non) : c’est tout ce qu’il y a au programme !
Il n’a jamais été question dans le programme d’aborder les notions de programmation fonctionnelle ou de programmation par objets comme vous l’avez déjà fait.

Logo de Alain BUSSER
jeudi 8 septembre 2011 à 22h24 - par  Alain BUSSER

Effectivement, on peut définir deux fonctions avec Algobox ; toutefois

  1. La fonction F1 ne peut se définir qu’en une ligne, et sans boucles, et ressemble donc plus à une expression qu’à un algorithme ;
  2. La fonction F2 ne peut être définie que par un seul test, toujours sans boucle (sauf celle qui est cachée dans la récursivité) ; là encore peut-on vraiment parler d’algorithme ?

Par exemple, définir une fonction par l’algorithme de Heron ou celui de Newton ou encore des algorithmes de calcul de cosinus ne semble pas possible avec les fonctions F1 et F2 d’Algobox, ainsi que les fonctions définies par sommes de séries...

On peut certes implémenter ces algorithmes dans Algobox mais les utiliser comme des fonctions, en calculant les images de listes de nombres ou en les représentant graphiquement c’est autre chose...

mercredi 7 septembre 2011 à 20h01

L’impossibilité de définir algorithmiquement une fonction avec Algobox
Ceci est inexact : AlgoBox permet de définir deux fonctions (F1 en fonction de x, F2 pouvant être récursive et dépendre de plusieurs paramètres)