# PREUD'HOMME Geoffrey # BEAUSSART Jean-loup # Donné le 27/01/201question(5) # TP2 Anagrammes - Dictionnaires # http://www.fil.univ-lille1.fr/~L1S2API/CoursTP/tp2_dictionnaires.html def partie(nom): print('\n\n\n###', nom, '###') def section(nom): print('\n\n===', nom, '===') def question(numero): print('\n***', 'Question', numero, '***') partie('Quelques méthodes sur les listes et les chaînes') # Geoffrey section('Méthode split') question(1) # TODO utf-8 # TODO en print ##>>> s = 'la méthode split est parfois bien utile' ##>>> s.split (' ') ##['la', 'm\xc3\xa9thode', 'split', 'est', 'parfois', 'bien', 'utile'] ##>>> s.split ('e') ##['la m\xc3\xa9thod', ' split ', 'st parfois bi', 'n util', ''] ##>>> s.split ('é') ##['la m', 'thode split est parfois bien utile'] ##>>> s.split () ##['la', 'm\xc3\xa9thode', 'split', 'est', 'parfois', 'bien', 'utile'] ##>>> s.split ('') ##Traceback (most recent call last): ## File "", line 1, in ##ValueError: empty separator ##>>> s.split ('split') ##['la m\xc3\xa9thode ', ' est parfois bien utile'] question(2) # TODO Reformuler print('La méthode `split` appliquée à une chaîne de caractères renvoie une liste de châines de caractères correspondant à la chaîne de caractère originale découpée aux endroits où se trouvent la chaîne de caractère passée en paramètre (ou si absente, la chaîne de caractère contenant le caractère espacement seul), exemptée de cette dernière.') question(3) # TODO utf-8 # TODO en print ##>>> s = "la méthode split est parfois bien utile" ##>>> s.split(' ') ##['la', 'm\xc3\xa9thode', 'split', 'est', 'parfois', 'bien', 'utile'] ##>>> s ##'la m\xc3\xa9thode split est parfois bien utile' print('De par cet exemple, on remarque que s reste la même chaîne de caractère, `split` ne modifie donc pas la chaîne de caractère à laquelle elle s\'applique (ce qui est logique vu le caractère non-mutable des chaînes de caractère') section('Méthode join') question(1) # TODO utf-8 # TODO en print ##>>> l = s.split() ##'lam\xc3\xa9thodesplitestparfoisbienutile' ##>>> " ".join (l) ##'la m\xc3\xa9thode split est parfois bien utile' ##>>> ";".join (l) ##'la;m\xc3\xa9thode;split;est;parfois;bien;utile' ##>>> " tralala ".join (l) ##'la tralala m\xc3\xa9thode tralala split tralala est tralala parfois tralala bien tralala utile' ##>>> print ("\n".join (l)) ##la ##méthode ##split ##est ##parfois ##bien ##utile ##>>> "".join (s) ##'la m\xc3\xa9thode split est parfois bien utile' ##>>> "!".join (s) ##'l!a! !m!\xc3!\xa9!t!h!o!d!e! !s!p!l!i!t! !e!s!t! !p!a!r!f!o!i!s! !b!i!e!n! !u!t!i!l!e' ##>>> "".join () ##Traceback (most recent call last): ## File "", line 1, in ##TypeError: join() takes exactly one argument (0 given) ##>>> "".join ([]) ##'' ##>>> "".join ([1,2]) ##Traceback (most recent call last): ## File "", line 1, in ##TypeError: sequence item 0: expected string, 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) # TODO utf-8 # TODO en print ##>>> chaine = '!' ##>>> chaine.join(l) ##'la!m\xc3\xa9thode!split!est!parfois!bien!utile' ##>>> chaine ##'!' print('De par cet exemple, on remarque que chaine reste la même chaîne de caractère, `join` ne modifie donc pas la chaîne de caractère à laquelle elle s\'applique (ce qui est logique vu le caractère non-mutable des chaînes de caractère') question(4) def join(chaine, sequence): res = '' l = len(sequence) for i in range(l): res += sequence[i] if i < l-1: res += chaine return res print(">>> join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])") print(join('.', ['raymond', 'calbuth', 'ronchin', 'fr'])) section('Méthode sort')http://www.fil.univ-lille1.fr/~L1S2API/CoursTP/tp2_dictionnaires.html question(1) question(2) section('Une fonction sort pour les chaînes') question(1) partie('Anagrammes') # Jean-loup question(1) def sont_anagrammes1(chaine1, chaine2): """ Prédicat, renvoie True si chaine1 et chaine2 sont des anagrammes, False sinon str, str -> bool CU: chaine1 et chaine2 sont des str """ assert(type(chaine1)==str and type(chaine2)==str) if len(chaine1) != len(chaine2): # Si la longueur est différente ca ne peut pas être des anagrammes return False l1 = list(chaine1) l2 = list(chaine2) l1.sort() l2.sort() return l1 == l2 question(2) def sont_anagrammes2(chaine1, chaine2): """ Prédicat, renvoie True si chaine1 et chaine2 sont des anagrammes, False sinon str, str -> bool CU: chaine1 et chaine2 sont des str """ assert(type(chaine1)==str and type(chaine2)==str) if len(chaine1) != len(chaine2): # Si la longueur est différente ca ne peut pas être des anagrammes return False occu1 = dict((i,chaine1.count(i)) for i in chaine1) occu2 = dict((i,chaine2.count(i)) for i in chaine2) return occu1 == occu2 question(3) def sont_anagrammes2(chaine1, chaine2): """ Prédicat, renvoie True si chaine1 et chaine2 sont des anagrammes, False sinon str, str -> bool CU: chaine1 et chaine2 sont des str """ assert(type(chaine1)==str and type(chaine2)==str) if len(chaine1) != len(chaine2): # Si la longueur est différente ca ne peut pas être des anagrammes return False for i in chaine1: if chaine1.count(i) != chaine2.count(i): return False return True section('Casse et accentuation') question(1) question(2) question(3) partie('Recherche d\'anagrammes') # Jean-loup section('Le lexique') question(1) question(2) question(3) question(4) section('Anagrammes d’un mot : première méthode') question(1) question(2) section('Anagrammes d’un mot : seconde méthode') question(1) question(2) question(3) question(4) question(5) section('Comparaison des deux méthodes') question(1) partie('Phrases d\'anagrammes') # Geoffrey question(1)