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