Il est possible de faire une version récursives de ce programme.
Comme la récursivité n'a pas encore été abordée au cours de la
formation, voici une version itérative :
##----- Définition des Fonctions -----##
def pas_accent(mot):
""" Entrées : mot est une chaîne de caractères
Sorties : le même mot dans lequel les éventuels espaces et chiffres ont été
supprimés. Les voyelles accentuées sont remplacées par des non accentuées."""
supprime = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ' ']
voyelles_a = ['à', 'á', 'â']
voyelles_e = ['è', 'é', 'ê', 'ë']
voyelles_i = ['î']
voyelles_o = ['ô']
voyelles_u = ['ù', 'ú', 'û']
new_mot = ''
for lettre in mot:
if lettre in voyelles_a :
new_mot += 'a'
elif lettre in voyelles_e :
new_mot += 'e'
elif lettre in voyelles_i :
new_mot += 'i'
elif lettre in voyelles_o :
new_mot += 'o'
elif lettre in voyelles_u :
new_mot += 'u'
elif lettre not in supprime :
new_mot += lettre
return new_mot
def dans_dico(mot):
""" Entrées : mot est une chaîne de caractères 'nettoyée'
Sorties : un booléen qui indique si le mot appartient au dictionnaire."""
rep = False # La réponse
f = open('dico_sans_doublon.txt', 'r')
if mot+'\n' in f:
rep = True
f.close()
return rep
def inserer(mot, lettre, indice):
""" Entrées : mot est une chaîne de caractères, lettre est un caractère, indice est un entier
Sorties : Le mot dans lequel on a inséré la lettre à l'indice indiqué"""
if indice <= len(mot):
mot = mot[:indice]+lettre+mot[indice:] # Tranche avant l'indice puis à partir de l'indice
return mot
def permuter(mot, lettre):
""" Entrées : mot est une chaîne de caractères, lettre est un caractère
Sorties : Renvoie la liste des chaînes de caractères composées du mot
dans lequel on a inséré la lettre à chacun des indices possibles"""
liste = []
for i in range(len(mot)+1): # i parcourt tous les indices selon la longueur de texte
liste.append(inserer(mot, lettre, i))
return liste
def anagrammes(mot):
""" Entrées : mot est une chaîne de caractères
Sorties : Renvoie la liste de tous les anagrammes du mot"""
mot = list(mot) # Liste des lettres de la chaine de caractères
liste_1 = [mot[0]]
liste_2 = [] # Liste transitoire, obtenue avec la fonction permuter()
for i in range(1, len(mot)): # i parcourt toutes les lettres de mot
for element in liste_1:
liste_2 += permuter(element, mot[i])
liste_1 = liste_2
liste_2 = []
return liste_1
def ana_sans_doublons(mot):
""" Entrées : mot est une chaîne de caractères
Sorties : Renvoie la liste des anagrammes de mot sans doublons et
triée par ordre alphabétique"""
liste=anagrammes(texte)
sortie = [liste[0]] # La liste contient le 1er anagramme
for i in range(1, len(liste)):
if liste[i] not in sortie: # On teste chaque nouvel anagramme avant de l'accepter
sortie.append(liste[i])
return sorted(sortie) # Tri de la liste sans doublon
##----- Programme principal -----##
mot = input("Entrez un mot s'il vous plaît : ")
mot = pas_accent(mot)
liste = ana_sans_doublons(mot)
print('Les anagrammes de ce mot sont :')
print(liste)
liste_finale = []
for mot in liste:
if dans_dico(mot):
liste_finale.append(mot)
print('Les anagrammes présents dans le dictionnaire sont :')
print(liste_finale)