Résumé en français : Vous devez créer un programme qui à partir d'une phrase, met tous les mots distincts dans une liste et retourne une chaine donnant les positions des mots de la phrase initiale dans cette liste. On ne tiendra pas compte de la casse.
Voici un autre exemple pour mieux comprendre :
phrase = 'The number 0 is such a strange number Strangely it has zero meaning'
>> compress(phrase)
'012345617891011'
En effet, la liste des mots uniques est :
['the', 'number', '0', 'is', 'such', 'a', 'strange', 'strangely', 'it', 'has', 'zero', 'meaning']
Il faut donc bien voir que le mot 'strangely' est à la 8e place dans la phrase initiale mais à la 7e place dans la liste des mots uniques, c'est donc 7 qu'il faut récupérer en non 8.
On peut commencer par créer la liste des mots uniques trouvés dans la phrase et dans un second temps parcourir à nouveau tous les mots de la phrase pour trouver leurs positions dans cette liste. Première étape :
def compress(phrase):
mots = [] # Tableau des mots uniques
for m in phrase.lower().split(): # On parcourt chaque mot
if m not in mots: # Nouveau mot ?
mots.append(m) # On l'ajoute à la liste
return mots
compress('The number 0 is such a strange number Strangely it has zero meaning')
['the', 'number', '0', 'is', 'such', 'a', 'strange', 'strangely', 'it', 'has', 'zero', 'meaning']
Remarquez qu'en Python, split
peut s'utiliser sans paramètre (par défaut ce sera espace) :
'ab cd'.split()
['ab', 'cd']
On peut maintenant chercher les positions des mots dans la liste des mots uniques en utilisant index
:
['the', 'number', '0', 'is'].index('is') # Position de 'is' ?
3
Ce qui donne cette version finale :
def compress(phrase):
decoup = phrase.lower().split()
mots = []
for m in decoup:
if m not in mots:
mots.append(m)
return ''.join([ str(mots.index(m)) for m in decoup ])
compress('The number 0 is such a strange number Strangely it has zero meaning')
'012345617891011'
str
permet de convertir un nombre en chaine.
Nous aurions également pu utiliser un dictionnaire :
dict.fromkeys('a b B A C b a'.lower().split())
{'a': None, 'b': None, 'c': None}
list(dict.fromkeys('a b B A C b a'.lower().split()))
['a', 'b', 'c']
Ce qui donne ce programme final :
def compress(phrase):
decoup = phrase.lower().split()
mots = list(dict.fromkeys(decoup)) # Liste des mots uniques
return ''.join(str(mots.index(m)) for m in decoup)
compress('The number 0 is such a strange number Strangely it has zero meaning')
'012345617891011'