From adca0b9bb52b65760b4c68165ea1d1165aec03fa Mon Sep 17 00:00:00 2001 From: jeanloup Date: Tue, 27 Jan 2015 11:24:38 +0100 Subject: [PATCH] Section accents et casse, questions 1,2 et 3 --- S2/TP2/tp2.py | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/S2/TP2/tp2.py b/S2/TP2/tp2.py index a3caf48..ddd76f5 100644 --- a/S2/TP2/tp2.py +++ b/S2/TP2/tp2.py @@ -188,7 +188,7 @@ def sont_anagrammes2(chaine1, chaine2): question(3) -def sont_anagrammes2(chaine1, chaine2): +def sont_anagrammes3(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 @@ -210,10 +210,48 @@ section('Casse et accentuation') question(1) +EQUIV_NON_ACCENTUE = {'é':'e', 'è':'e', 'à':'a', 'ç':'c', 'ï':'i', 'î':'i', 'ô':'o', 'ë':'e', 'ê':'e', 'â':'a', 'û':'u'} + question(2) +def bas_casse_sans_accent(chaine): + """ str -> str, renvoie une chaine qui est l'équivalent non accentuée et minuscule de la chaine passée en paramètre + CU: chaine est un str + """ + + assert(type(chaine)==str) + + chaineCpy=chaine.lower() + + ret = "" + + for i in chaineCpy: + if i in EQUIV_NON_ACCENTUE: + ret += EQUIV_NON_ACCENTUE[i] + else: + ret += i + + return ret + question(3) +def sont_anagrammes_sans_casse_ni_accent(chaine1, chaine2): + """ Prédicat, renvoie True si chaine1 et chaine2 sont des anagrammes, False sinon, ne tient pas compte de la casse ou des accents + 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 + + chaine1Cpy = bas_casse_sans_accent(chaine1) + chaine2Cpy = bas_casse_sans_accent(chaine2) + + return sont_anagrammes2(chaine1Cpy, chaine2Cpy) + + partie('Recherche d\'anagrammes') # Jean-loup