Boucles et itérateurs en Python

En Python, tout est objet, même les boucles
jeudi 20 octobre 2011
par  Alain BUSSER

La chapitre sur les intervalles a servi de prétexte à une introduction des boucles à nombre prédéfini d’exécutions, celles-ci pouvant être stockées dans des variables ! En fait, un itérateur est un algorithme, qui permet d’économiser de la mémoire en remplaçant les données par un procédé permettant de les obtenir.

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 :

  1. Tableau de valeurs d’une fonction (en bas de la première page)
  2. Diagramme en bâtons des effectifs
  3. Tableur (pour la comparaison)

Le sujet est ici :

PDF - 102.6 ko
intervalles et itérateurs : sujet

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 :

PDF - 105.3 ko
découverte du module tortue : sujet

Malgré la simplicité de l’énoncé, les élèves font preuve d’une extraordinaire imagination pour faire des erreurs totalement imprévues :

PDF - 872.7 ko
corrigé du TP tortue

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 :

PDF - 104.6 ko
représentation graphique d’une fonction avec turtle : sujet

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.


[1Ça fera plaisir aux AAA, les fameux Ayatollahs Anonymes d’AlgoBox qui mettent tant d’énergie à déverser leur fiel anonyme en commentaire, sans jamais étayer leur propos d’un seul fait vérifiable...


Commentaires

Logo de Charline
mercredi 16 janvier 2013 à 14h51 - par  Charline

Très clair et efficace, c’est justement ce qu’on réclame ! Merci à vous.

blackjack online


blackjack gratuit francais


blackjack is 21 black jack nombre de jeux blackjack seed blackjack xc 400 blackjack 34

Logo de Alain BUSSER
lundi 14 novembre 2011 à 15h17 - par  Alain BUSSER

Suite de cette passionnante et fondamentale discussion sur le thème de « puisqu’en Python, tout est objet, est-ce que les boucles en sont aussi ? ».

Afin d’abréger les insomnies que les lecteurs de cet article n’ont pas manqué de subir, hantés par l’angoisse de savoir si, oui on non, les boucles de Python sont des objets, j’ai contacté un des nombreux auteurs qui osent prétendre, les hardis personnages, que « en Python, tout est objet ». Il m’a très diligemment répondu qu’effectivement, les boucles ne sont pas des objets, et avec sa permission, je reproduis ici sa réponse, empreinte d’une humilité sur laquelle nous devrions peut-être prendre exemple :


Think about it — if it was an object, you
should be able to store it, introspect it, print it, call methods on
it. But you can’t do any of those for a loop.

You may be thinking of iterators, which *are* objects. They have
state, methods, etc. But a loop is more (or less !) than an iterator.
And a while-loop doesn’t use an iterator.

Guido

Comme mon correspondant l’a souligné, j’avais donc confondu les itérateurs (qui, eux, sont des objets, si j’ose en croire mon correspondant) avec les boucles que les itérateurs en question remplacent avantageusement face à des élèves qui ont du mal à « suivre le mouvement » de la boucle, et qui préfèrent manipuler des objets statiques à la place. D’ailleurs, même René Grothmann a fini par adopter des « boucles statiques » (je ne sais pas comment les appeler faute de mieux ) dans Euler Math Toolbox. Je n’aurais donc pas du écrire « En Python, tout est objet, même les boucles » mais « En Python, tout est objet, même les itérateurs ». Je compte d’ailleurs m’autoflageller à coup de tortues LOGO pour me punir d’avoir osé faire la confusion. Je repasse la parole à mon nouveau correspondant, que je serais assez enclin à considérer comme un spécialiste de Python :


for-loop iterating over « sequences » (instead of the Pascal’s
« arithmetic progression » for-loop or C’s « roll your own » for-loop) is
a pretty common feature now, found in many other languages. It is also
often known as « for each » and even Java has one nowadays.

Guido

Il est remarquable comme parfois, l’opinion que l’on se fait de l’étendue de ses propres connaissances sur un sujet, est inversement proportionnelle à l’étendue réelle desdites connaissances : Qui eût cru qu’un tel spécialiste de la question prendrait le temps de répondre à une question finalement bien futile face aux difficultés que l’on peut vivre en classe ?

for n in range(1000):
   print('mille fois merci, Guido')

Voilà, la paix peut enfin régner sur l’IREM, tout le monde peut à nouveau dormir tranquille après cette très indispensable mise au point, puisque nous savons enfin la vérité : Les boucles ne sont pas des objets, seuls les itérateurs le sont !

Logo de Alain BUSSER
samedi 12 novembre 2011 à 22h09 - par  Alain BUSSER

Bonjour,

c’est vraiment gentil de signaler l’existence d’erreurs dans ce que j’écris. Mais si vous ne m’en faites pas une liste précise, comment voulez-vous que je les corrige ?

Merci

samedi 12 novembre 2011 à 11h29

« En Python, tout est objet, même les boucles » ????
Par pitié, faites au moins relire vos articles par des gens qui s’y connaissent vraiment en python et en POO (ce qui n’est manifestement pas votre cas).
Avec toutes les erreurs dans vos articles (ici et dans mathematice), vous allez finir par faire perdre toute crédibilité à l’IREM de la Réunion.

G.Caron

Logo de Alain BUSSER
samedi 22 octobre 2011 à 09h51 - par  Alain BUSSER

« faire une copie d’écran » : Je vous invite à publier les erreurs de vos élèves ici même, mais si possible en faisant un peu plus d’efforts pour respecter la nétiquette : N’oubliez pas qu’il s’agit d’un forum !

vendredi 21 octobre 2011 à 23h07

Ça fera plaisir aux AAA, les fameux Ayatollahs Anonymes d’AlgoBox qui mettent tant d’énergie à déverser leur fiel anonyme en commentaire, sans jamais étayer leur propos d’un seul fait vérifiable...

Quand on recrée de toute pièce sur son propre mac des « erreurs d’élèves » ( http://www.reunion.iufm.fr/recherche/irem/spip.php?article525 ), on devrait éviter de donner des leçons de morale et d’honnêteté intellectuelle.
A moins que vous nous expliquiez comment vous faites pour faire une copie d’écran d’erreurs d’élèves pile au bon moment (à la seconde près) avant que les élèves appuient sur « Ok ».

Signé : AAA

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 14 juin 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mercredi 21 juin 2017, 14h-18h, 146 route de Grand-Coude, Saint-Joseph


Brèves

Décès de Roger Mohr

mardi 27 juin

On sait bien que Nicolas Bourbaki n’était pas le nom d’une personne mais le pseudonyme d’un groupe. L’équivalent en informatique théorique est Claude Livercy, auteur de la théorie des programmes. Roger Mohr était un des membres de Claude Livercy.

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

L’algorithmique à l’IREM de Lille

vendredi 26 juin 2009

Le groupe AMECMI de l’IREM de Lille vient de mettre en ligne des ressources importantes au service des professeurs de Seconde :

- Algorithmique et programmation (Emmanuel Ostenne)
- Bibliographie amoureuse de l’algorithmique (Alain Juhel)

Statistiques

Dernière mise à jour

lundi 24 juillet 2017

Publication

759 Articles
Aucun album photo
133 Brèves
11 Sites Web
132 Auteurs

Visites

306 aujourd'hui
292 hier
2063396 depuis le début
12 visiteurs actuellement connectés