Différences
Ci-dessous, les différences entre deux révisions de la page.
tc_info:tp7_old [2019/09/28 16:16] – créée edauce | tc_info:tp7_old [2019/09/28 16:17] (Version actuelle) – [Exercice 2 : format xml / librairie etree] edauce | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | |||
+ | ==== Arbre de complétion ==== | ||
+ | |||
+ | Un algorithme de complétion est un mécanisme logique permettant d' | ||
+ | |||
+ | On utilise pour cela une structure de données arborescente, | ||
+ | |||
+ | Le but de cet exercice est de construire un arbre de complétion à partir de mots de vocabulaire, | ||
+ | |||
+ | <note tip> | ||
+ | V = {art, arbre, des, dessin} | ||
+ | |||
+ | {{: | ||
+ | </ | ||
+ | |||
+ | === 2.1 tests === | ||
+ | Un arbre de complétion sera défini de manière récursive. Un nœud de l' | ||
+ | |||
+ | * fils : un dictionnaire de nœuds indexés par des caractères | ||
+ | * compteur : un entier valant : | ||
+ | * 0 si le mot n'est pas dans la base | ||
+ | * une valeur >0 indiquant le nombre d' | ||
+ | |||
+ | Vous devez : | ||
+ | |||
+ | 1. Créer un nœud vide sous la forme d'un dictionnaire à 2 entrées: | ||
+ | * ''" | ||
+ | * ''" | ||
+ | |||
+ | 2. Définir la fonction : | ||
+ | <code python> | ||
+ | def insere(A, mot): | ||
+ | ... | ||
+ | </ | ||
+ | qui insère un mot dans un nœud '' | ||
+ | |||
+ | Cette fonction récursive teste si la première lettre du mot est présente dans le dictionnaire des fils. Si non, elle crée l' | ||
+ | |||
+ | 3. Écrivez et testez la fonction : | ||
+ | <code python> | ||
+ | def affiche(A, s): | ||
+ | ... | ||
+ | </ | ||
+ | qui affiche l' | ||
+ | |||
+ | Créez un arbre de complétion. Insérez les mots ''" | ||
+ | |||
+ | 4. Écrivez et testez la fonction : | ||
+ | <code python> | ||
+ | def suivant(A, debut): | ||
+ | ... | ||
+ | </ | ||
+ | qui, à partir de la chaîne '' | ||
+ | |||
+ | Améliorez votre fonction pour que les mots les plus courants apparaissent en premier dans la liste. | ||
+ | |||
+ | 5. Écrivez et testez la fonction : | ||
+ | <code python> | ||
+ | def appartient(A, | ||
+ | ... | ||
+ | </ | ||
+ | qui retourne '' | ||
+ | |||
+ | === 2.2 Vocabulaire complet === | ||
+ | Une fois que tout fonctionne, vous devez créer un arbre contenant l' | ||
+ | |||
+ | * ouvrez le fichier | ||
+ | * créez une liste de vocabulaire vide | ||
+ | * pour chaque ligne du fichier, ajouter à la liste de vocabulaire le premier mot de la ligne | ||
+ | * ajouter chaque mot de la liste de vocabulaire dans l' | ||
+ | * vérifiez que l' | ||
+ | * affichez les listes de mots proposés pour différents débuts de mots (exemples : ''' | ||
+ | |||
+ | ==== Exercice 2 : format xml / librairie etree ==== | ||
+ | |||
+ | |||
+ | <note tip> | ||
+ | ** Fichiers XML** | ||
+ | |||
+ | Les fichiers xml permettent de stocker ou transmettre des données de type texte organisées de manière hiérarchique, | ||
+ | |||
+ | Exemple : | ||
+ | <code xml> | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | Chaque portion de texte peut-elle-même contenir des portions de textes encadrées par des balises et ainsi de suite... Les balises définissent ainsi la mise en forme du document, selon une organisation de type hiérarchique. | ||
+ | |||
+ | Exemple : | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Le traitement des fichiers xml est facilité en Python à l’aide de la librairie '' | ||
+ | <code python> | ||
+ | import xml.etree.cElementTree as etree | ||
+ | </ | ||
+ | |||
+ | qui construit une sructure de données arborescente à partir d’un fichier xml: | ||
+ | <code python> | ||
+ | f = open (' | ||
+ | doc = etree.parse(f) | ||
+ | </ | ||
+ | l’objet '' | ||
+ | {{http:// | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * Enfin, '' | ||
+ | La boucle : | ||
+ | <code python> | ||
+ | for s in r : | ||
+ | ... | ||
+ | </ | ||
+ | permet de parcourir la liste des fils de '' | ||
+ | </ | ||
+ | === A faire === | ||
+ | On souhaite réaliser un convertisseur de monnaies à partir d’un fichier contenant des taux de conversion actualisés de l’euro vers d’autres monnaies (dollar, yen, etc...). | ||
+ | Le fichier {{http:// | ||
+ | |||
+ | Pour ouvrir ce fichier, situé sur le web, on utilisera la librairie '' | ||
+ | <code python> | ||
+ | from urllib.request import urlopen | ||
+ | f = urlopen(" | ||
+ | </ | ||
+ | Affichez le contenu de ce document. | ||
+ | |||
+ | Vous remarquerez qu’il est organisé en 3 sections : '' | ||
+ | |||
+ | - 1 - Écrivez une fonction affiche de manière récursive le contenu du document, c'est à dire qui, pour chaque nœud, affiche | ||
+ | |||
+ | - 2 - Selon la norme adoptée ici, les balises de type cube servent à stocker les données sous forme de listes : ''< | ||
+ | |||
+ | Le premier sous-niveau représente la date (time), | ||
+ | ''< | ||
+ | |||
+ | et le second sous-niveau contient les valeurs de taux de change sous forme d’attributs currency (devise) et rate (taux de change). | ||
+ | ''< | ||
+ | |||
+ | Ainsi, pour obtenir les taux de change, il faut extraire les attributs de chaque fils du premier sous-niveau : si '' | ||
+ | |||
+ | Écrivez une fonction '' | ||
+ | |||
+ | - 3 - Écrire une fonction convertisseur qui reçoit un montant en euro et un nom de devise et retourne un montant dans cette devise. | ||
+ | |||
+ | Toutes ces fonctions seront testées au niveau du programme principal | ||
+ | |||
+ | |||