support_eleves_cours..

Transcription

support_eleves_cours..
Prototypage d’interfaces par langage de script
Le Python, c’est bon
Cours 4 : Huffman et code coverage
1
Les graphes
Lors du dernier TD, vous avez du commencer à créer une classe graphe. Le
fichier graphs.py en montre une implémentation. Le fichier de test qui l’accompagne
est test graphs.py.
1.1
La classe Graph
Examinez de plus prêt le fichier graphs.py. Il doit comporter quelques nouveautés :
• des paramètres par défaut : lesquels ?
• quelle est l’utilité de la fonction
méthode vertices() ?
• À quoi correspond
getitem
iter
? En quoi diffère-t-elle de la
et comment l’utilise-t-on ?
• Que signifie la commande lambda ?
Trouver les réponses à ces questions en googleant, en regardant la documentation (en particulier le tutoriel) ou en analysant le code.
Le module graphs.py définie également un algorithme BellmanFord et une
erreur CircuitError. À l’aide de Wikipédia (par exemple) comprenez leurs
utilités.
1.2
Les tests
Le fichier test graphs.py comporte les tests de la classe graphe. Vous paraissentils suffisant ? Pourquoi ?
1
1.3
Le code coverage
Lors de la création de tests, il est nécessaire que tout le code écrit soit testé.
Comme il peut être difficile (et fastidieux) de le vérifier à la main, des outils de
code coverage ont été développé. Allez là :
http://nedbatchelder.com/code/modules/coverage.html
et télécharger le code. Vous le décompresserez dans le répertoire contenant
les sources de votre TD.
Nous n’aurons besoin ici que du fichier coverage.py, nous n’installerons donc
pas le module à proprement parler.
Lisez l’aide. . . Pour ce qui est de nos besoins, nous effectuerons dons l’ordre
les commandes suivantes :
1. coverage.py -e
2. coverage.py -x test graphs.py
3. coverage.py -r -m graphs.py
Explicitez et justifiez cette liste de commandes.
Jouez un peu avec coverage.py pur mieux le comprendre. En particulier,
on vous demande de créer un fichier contenant les lignes de Graph.py testée et
celles qui ne le sont pas.
1.4
Objectif 100%
On vous demande que toutes les lignes de Graph.py soient testées. Utilisez des
tests judicieux. . .
Attention, il sera sans-doute nécessaire d’utiliser la commande coverage.py
-e de tant en temps. Pourquoi ?
1.5
Ajout de fonctionnalités à Graph
Pour la suite de nos aventures, il va falloir étoffer un peu la classe graphe.
En particulier il vous est demandé de coder et de tester les fonctionnalités
suitantes :
• l’ajout et la suppression de sommets (un ou plusieurs en même temps),
• l’ajout et la suppression d’arêtes (une ou plusieurs en même temps),
• le renommage de sommets.
2
Graphes et Code de Huffman
Nous allons utiliser notre classe graphe pour mettre en place une méthode
de compression conue sous le nom de codage de Huffman. Faites une petite
recherche sur le net pour comprendre le comment du pourquoi de cette méthode.
2
Une fois cette méthode comprise, on vous demande de la coder et de la
tester. On pourra utiliser la classe graphe en entier ou seulement des parties de
celle-ci. On vous demande en particulier d’obtenir les fonctions suivantes :
• création d’un arbre de Huffman à partir d’une liste de caractères et du
nombre de fois où ils apparaissent,
• associer un nombre binaire à un caractère à partir de son arbre,
• associer un caractère à un nombre binaire à partir de son arbre,
• créer un dictionnaire contenant le nombre d’occurrences de chaque caractère pour un texte donnée,
• créer un fichier compressé à partir d’un fichier texte donné.
3
Mesurer le temps d’exécution
Nous n’utiliserons pas ici les module profile, cProfile ou hotshot fourni par
python pour mesurer le temps d’exécution de vos programmes. Ceux qui seront
intéressés pourront toujours aller regarder du côté du chapitre 25 du livre Python
Library Reference (http://docs.python.org/lib/profile.html).
Nous utiliserons le module timeit qui permet de mesurer le temps de petits
bouts de code.
3.1
Module timeit
Lisez la partie relative à timeit dans le Python Library Reference et sa partie
dans le dive into python :
• http://docs.python.org/lib/module-timeit.html
• http://diveintopython.adrahon.org/performance_tuning/timeit.html
Comprenez son fonctionnement en :
• écrivant des lignes de code testant ses diverses fonctionnalités,
• en utilisant ses capacités en lignes de commandes.
3.2
À faire
Mesurer le temps d’exécution moyen de vos encodage et décodage de texte.
3