diff --git a/S2/TP2/tp2.py b/S2/TP2/tp2.py index 947997b..1cbd9ab 100644 --- a/S2/TP2/tp2.py +++ b/S2/TP2/tp2.py @@ -47,9 +47,6 @@ print( question(3) -# TODO utf-8 -# TODO en print - print(">>> s = 'la méthode split est parfois bien utile'") s = 'la méthode split est parfois bien utile' print(">>> s.split(' ')") @@ -112,7 +109,10 @@ question(4) def join(chaine, sequence): - # TODO Docstring + """ + Retourne la concaténation des éléments de séquence en insérant chaine entre eux. + str, [str *] → str + """ res = '' l = len(sequence) for i in range(l): @@ -170,7 +170,10 @@ question(1) def sort(chaine): - # TODO Docstring + """ + Trie les caractères de chaine par ordre de codage. + str → str + """ # TODO On peut pas faire plus court ? t = list(chaine) t.sort() @@ -416,7 +419,7 @@ section('Comparaison des deux méthodes') question(1) -NB_TESTS = 30 # Mettre à 0 pour réduire l'attente +NB_TESTS = 30 # Mettre à 0 pour réduire l'attente import time @@ -431,7 +434,8 @@ for t in range(NB_TESTS): temps2 = time.time() - debut print('La première méthode a duré %s secondes, et la deuxième %s secondes.' % (temps1, temps2), - 'La deuxième méthode est %0.2f fois plus efficace que la première.' % (temps1 / temps2), + 'La deuxième méthode est %0.2f fois plus efficace que la première.' % ( + temps1 / temps2), 'En effet, la première vérifie %d combinaisons d\'anagrammes, alors que la deuxième ne \ réalise qu\'un accès à un dictionnaire. Notons que la construction dudit dictionnaire a lui aussi \ pris un certain temps, mais reste négligeable par rapport à la première méthode.' % len(LEXIQUE), @@ -443,10 +447,15 @@ question(1) # TODO Texte explicatif du concept d'arbres + def liste_possibilites(arbre, precede): - # dict → list - # TODO Docstring - # {1: {3: None}, {4: None}, 2: None} ⇒ [[1, 3], [1, 4], 2] + """ + Renvoie la liste des possibilités à partir d'un arbre de possibilités. + dict, list → list + + >>> liste_possibilites(annagrammes_arbre(['mange', 'ton']), []) + [['mange', 'ton'], ['mange', 'ont'], ['mangé', 'ton'], ['mangé', 'ont']] + """ possibilites = [] for branche in arbre: if type(arbre[branche]) == dict: @@ -458,9 +467,13 @@ def liste_possibilites(arbre, precede): def annagrammes_arbre(liste): - # TODO Docstring - # En supposant que (1, 3) et (2, 4) sont anagrammes - # [1, 2] ⇒ {1: {2: None, 4: None}, 3: {2: None, 4: None}} + """ + Renvoie l'arbre des anagrammes possibles à partir d'une liste de mots. + list → dict + + >>> annagrammes_arbre(['mange', 'ton']) + {'mange': {'ton': None, 'ont': None}, 'mangé': {'ton': None, 'ont': None}} + """ anagrammesPremier = anagrammes(liste[0]) if len(liste) > 1: # Si il y a des anagrammes après return dict((i, annagrammes_arbre(liste[1:])) for i in anagrammesPremier) @@ -469,7 +482,13 @@ def annagrammes_arbre(liste): def annagrammes_phrase(phrase): - # TODO Docstring + """ + Renvoie la liste des anagrammes possibles à partir d'une phrase. + str → str + + >>> annagrammes_phrase('mange ton') + ['mange ton', 'mange ont', 'mangé ton', 'mangé ont'] + """ mots = phrase.split() arbre = annagrammes_arbre(mots) liste = liste_possibilites(arbre, []) @@ -486,6 +505,10 @@ question(1) def sauver_dico(): + """ + Sauvegarde le dictionnaire des anagrammes dans un fichier. + ∅ → ∅ + """ fichier = open(ANAGRAMMES_FICHIER, 'w') for i in ANAGRAMMES: fichier.write(i + ':' + ':'.join(ANAGRAMMES[i]) + '\n') @@ -503,6 +526,10 @@ question(3) def charger_dico(): + """ + Lit le dictionnaire des anagrammes depuis un fichier. + ∅ → ∅ + """ ANAGRAMMES = dict() fichier = open(ANAGRAMMES_FICHIER, 'r') for ligne in fichier: