diff --git a/S2/TP2/tp2.py b/S2/TP2/tp2.py index 1cbd9ab..44dd396 100644 --- a/S2/TP2/tp2.py +++ b/S2/TP2/tp2.py @@ -21,10 +21,10 @@ def question(numero): partie('Quelques méthodes sur les listes et les chaînes') # Geoffrey + section('Méthode split') question(1) - print(">>> s = 'la méthode split est parfois bien utile'") s = 'la méthode split est parfois bien utile' print(">>> s.split (' ')") @@ -41,12 +41,10 @@ print(">>> s.split ('split')") print(s.split('split')) question(2) - print( 'La méthode `split` renvoie la liste des chaînes de la découpe de la chaîne sur laquelle est appliquée la fonction par la chaîne passée en argument (ou à défaut le caractères d\'espacement') question(3) - print(">>> s = 'la méthode split est parfois bien utile'") s = 'la méthode split est parfois bien utile' print(">>> s.split(' ')") @@ -61,7 +59,6 @@ print( section('Méthode join') question(1) - print(">>> s = 'la méthode split est parfois bien utile'") s = 'la méthode split est parfois bien utile' print('>>> l = s.split()') @@ -88,12 +85,10 @@ print('>>> "".join ([1,2])') print('TypeError: sequence item 0: expected str instance, int found') question(2) - print( 'La méthode join concatène les chaînes de caractères contenues dans la liste passée en paramètre, en insérant entre deux la chaîne de caractère sur laquelle elle est appliquée.') question(3) - print('>>> chaine = \'!\'') chaine = '!' print('>>> chaine.join(l)') @@ -106,8 +101,6 @@ print( 'De par cet exemple, on remarque que chaine reste la même chaîne de caractères, `join` ne modifie donc pas la chaîne de caractères à laquelle elle s\'applique (ce qui est logique vu le caractère non-mutable des chaînes de caractères') question(4) - - def join(chaine, sequence): """ Retourne la concaténation des éléments de séquence en insérant chaine entre eux. @@ -124,10 +117,10 @@ def join(chaine, sequence): print(">>> join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])") print(join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])) + section('Méthode sort') question(1) - print('>>> l = list (\'timoleon\')') l = list('timoleon') print('>>> l.sort()') @@ -153,7 +146,6 @@ print( 'Il semblerait que la méthode sort trie les caractères de s selon l\'ordre croissant de leur numéro de code ASCII (ou tout encodage utilisé)') question(2) - print('>>> l = [\'a\', 1]') print('>>> l.sort()') print('TypeError: unorderable types: int() < str()') @@ -167,8 +159,6 @@ print( section('Une fonction sort pour les chaînes') question(1) - - def sort(chaine): """ Trie les caractères de chaine par ordre de codage. @@ -186,8 +176,6 @@ print(sort('timoleon')) partie('Anagrammes') # Jean-loup question(1) - - def sont_anagrammes1(chaine1, chaine2): """ Indique si chaine1 et chaine2 sont anagrammes @@ -208,8 +196,6 @@ def sont_anagrammes1(chaine1, chaine2): return c1 == c2 question(2) - - def sont_anagrammes2(chaine1, chaine2): """ Indique si chaine1 et chaine2 sont anagrammes @@ -230,8 +216,6 @@ def sont_anagrammes2(chaine1, chaine2): return occu1 == occu2 question(3) - - def sont_anagrammes3(chaine1, chaine2): """ Indique si chaine1 et chaine2 sont anagrammes @@ -256,13 +240,10 @@ def sont_anagrammes3(chaine1, chaine2): section('Casse et accentuation') question(1) - EQUIV_NON_ACCENTUE = {'é': 'e', 'è': 'e', 'à': 'a', 'ç': 'c', 'î': 'i', 'ï': 'i', 'ô': 'o', 'ê': 'e', 'ë': 'e', 'â': 'a', 'û': 'u', 'ü': 'u', 'ù': 'u'} question(2) - - def bas_casse_sans_accent(chaine): """ Renvoie l'équivalent minuscule non accentuée de la chaîne passée en paramètre @@ -284,8 +265,6 @@ def bas_casse_sans_accent(chaine): return ret question(3) - - def sont_anagrammes_sans_casse_ni_accent(chaine1, chaine2): """ Indique si chaine1 et chaine2 sont anagrammes sans de tenir compte de la casse ni des accents @@ -315,25 +294,21 @@ section('Le lexique') # TODO Question 1 ? question(2) - from lexique import * question(3) - print('Il y a %d mots dans le lexique' % len(LEXIQUE)) question(4) - test = len(LEXIQUE) == len(set(LEXIQUE)) # Bien que l'on ai vu en cours que cette méthode n'est pas la plus économique en mémoire, c'est # bizarrement la plus rapide print('Le test a retourné %s.' % test) + section('Anagrammes d\'un mot : première méthode') question(1) - - def anagrammes(mot): """ Recherche les anagrammes de mot @@ -346,21 +321,18 @@ def anagrammes(mot): return [i for i in LEXIQUE if sont_anagrammes_sans_casse_ni_accent(i, mot)] question(2) - for a in ['Orange', 'Calbuth']: print('Les anagrammes de %s sont %s.' % (a, ', '.join(anagrammes(a)))) + section('Anagrammes d\'un mot : seconde méthode') question(1) - print('Il se peut que certains mots du lexique soient des anagrammes d\'autres mots du lexique,\ or on se retrouverait alors avec plusieurs fois la même liste d\'anagrammes \ pour des clés différentes.') question(2) - - def cle(mot): """ Renvoie la version triée des lettres en minuscule et sans accents de mot @@ -374,9 +346,7 @@ def cle(mot): return sort(cpy) - question(3) - ANAGRAMMES = dict() for m in LEXIQUE: @@ -390,8 +360,6 @@ for m in LEXIQUE: print('Le dictionnaire des anagrammes contient %d entrées' % len(ANAGRAMMES)) question(4) - - def anagrammes2(mot): """ Recherche les anagrammes de mot @@ -408,9 +376,7 @@ def anagrammes2(mot): else: return [] - question(5) - for a in ['Orange', 'Calbuth']: print('Les anagrammes de %s sont %s.' % (a, ', '.join(anagrammes2(a)))) @@ -418,7 +384,6 @@ for a in ['Orange', 'Calbuth']: section('Comparaison des deux méthodes') question(1) - NB_TESTS = 30 # Mettre à 0 pour réduire l'attente import time @@ -444,7 +409,6 @@ pris un certain temps, mais reste négligeable par rapport à la première méth partie('Phrases d\'anagrammes') # Geoffrey question(1) - # TODO Texte explicatif du concept d'arbres @@ -497,13 +461,12 @@ def annagrammes_phrase(phrase): print('>>> annagrammes_phrase(\'Mange ton orange\')') print(annagrammes_phrase('Mange ton orange')) + partie('Sauvegarde et récupération') ANAGRAMMES_FICHIER = 'anagrammes.txt' question(1) - - def sauver_dico(): """ Sauvegarde le dictionnaire des anagrammes dans un fichier. @@ -521,10 +484,7 @@ taille = getsize(ANAGRAMMES_FICHIER) print('Le dictionnaire fait %d octets, soit %0.3f Mio.' % (taille, taille / 1024 / 1024)) - question(3) - - def charger_dico(): """ Lit le dictionnaire des anagrammes depuis un fichier.