Collage de mots⚓︎
Un logiciel de reconnaissance vocale donne la liste des mots d'un candidat hésitant, il y a de nombreux « heu » que l'on souhaite supprimer de son discours.
Écrire une fonction supprimeuh
- qui prend en paramètre
mots
: une liste de mots qui sont des chaines de caractères (non vides) uniquement composées de lettres minuscules, - et qui renvoie le discours sous forme d'une seule chaine de caractères qui ne contient plus les mots
"heu"
de la liste. Les mots seront séparés par une seule espace. Il n'y aura pas d'espace ni au début, ni à la fin du discours.
On n'utilisera pas
join
, ni
Exemples
>>> supprimheu(["je", "heu", "vais", "coder", "heu", "la", "fonction", "supprimheu"])
'je vais coder la fonction supprimheu'
>>> supprimheu(["c", "est", "facile"])
'c est facile'
def supprimheu(mots):bksl-nl ...bksl-nlbksl-nlbksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert supprimheu(["je", "heu", "vais", "coder", "heu", "la",bksl-nl "fonction", "supprimheu"]) == 'je vais coder la fonction supprimheu'bksl-nlbksl-nlassert supprimheu(["c", "est", "facile"]) == 'c est facile'bksl-nlbksl-nldef supprimheu(mots):bksl-nl discours = ""bksl-nl for mot in mots:bksl-nl if mot != "heu":bksl-nl if discours != "":bksl-nl # on a déjà mis un motbksl-nl discours += " "bksl-nl discours += motbksl-nl return discoursbksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert supprimheu(["je", "heu", "vais", "coder", "heu", "la",bksl-nl "fonction", "supprimheu"]) == 'je vais coder la fonction supprimheu'bksl-nlbksl-nlassert supprimheu(["c", "est", "facile"]) == 'c est facile'bksl-nlbksl-nl
A
On ajoute une espace avant d'ajouter un mot au discours, sauf si c'est le premier ; chose que l'on détecte quand le discours est vide.
Version fonctionnelle⚓︎
L'énoncé interdit d'utiliser
join
Voici ce que ça aurait pu donner : 1 ligne !
def supprimheu(mots):
return " ".join(mot for mot in mots if mot != "heu")
Version avec filtre avant collage⚓︎
Cette version n'est pas recommandée !
def supprimeuh(mots):
liste_mots = []
for mot in mots:
if mot != "heu":
liste_mots.append(mot)
if liste_mots == []:
return ''
chaine = liste_mots[0]
for mot in liste_mots[1:]:
chaine = chaine + ' ' + mot
return chaine
Autre version itérative⚓︎
Dans la plupart des juges en ligne, la présence d'espaces supplémentaires en fin de ligne est acceptée. Dans ce cas, une solution serait :
def supprimheu(mots):
discours = ""
for mot in mots:
if mot != "heu":
discours += mot + " "
return discours
Dernière remarque : si on souhaite après coup enlever les espaces en trop à la fin, on peut utiliser rstrip
ainsi : return discours.rstrip()
Z