# coding: latin-1 # question 1 def frequence_lettre (mot) : res = { } for c in mot : if c in res : res[c] += 1 else : res [c] = 1 return res print frequence_lettre ("aviateur") # affiche {'a': 2, 'e': 1, 'i': 1, 'r': 1, 'u': 1, 't': 1, 'v': 1} # Deux autres écritures de la fonction def frequence_lettre (mot) : res = { c:0 for c in mot } for c in mot : res[c] += 1 return res def frequence_lettre (mot) : res = { } for c in mot : # la méthode get retourne res[c] si cette valeur existe, 0 sinon res[c] = res.get( c, 0 ) + 1 return res # question 2 def anagramme (mot1, mot2) : h1 = frequence_lettre(mot1) h2 = frequence_lettre(mot2) # il fallait éviter d'écrire la ligne suivante bien qu'elle retourne le résultat cherché : # return h1 == h2 for c in h1 : if c not in h2 or h1[c] != h2[c] : return False # il ne faut pas oublier cette seconde partie for c in h2 : if c not in h1 : return False return True a,b = "anagramme", "agrammane" print anagramme (a,b), anagramme (b,a) # affiche True, True # on vérifie que la fonctionne marche aussi dans l'autre cas a,b = "anagramme", "agrummane" print anagramme (a,b), anagramme (b,a) # affiche False, False # on pouvait faire plus rapide en éliminant les cas évidents def anagramme (mot1, mot2) : if len(mot1) != len(mot2) : return False h1 = frequence_lettre(mot1) h2 = frequence_lettre(mot2) if len(h1) != len(h2) : return False for c in h1 : if h1[c] != h2.get(c, 0) : return False return True