Bonjour,

Envoyé par
renaud1967
"votre fonction indique une erreur "'str' object is not callable". "
Je ne connais pas ce site mais au vu de l'erreur il semble vouloir tester votre fonction.
Est-ce qu'il n'utiliserait pas la dernière ligne anti_voyelle("Regarde les Mots!") qui renvoie du texte pour essayer d'appeler la fonction ?
Je sais que vous apprenez mais vous verrez certainement plus tard qu'il existe des méthodes pour réduire ce code en une ligne, plus « pythonique » et efficace.
1 2
| # Python 2 & 3
''.join(filter(lambda c: c not in "aeiouyAEIOUY", "Regarde les Mots!")) |
filter(function or None, iterable)
Pour chaque élément contenu dans l'iterable, ici du texte qui contient des caractères itérables.
Retourne l'élément itéré si la condition passée par la fonction est vraie (True)
Condition: élément c not in "aeiouAEIOU" qui va retourner True or False
La fonction filter retourne un objet iterable que l'on peut parcourir en liste par exemple.
str().join(iterable) va ensuite joindre les éléments pour en faire du texte/string.
Voilà comment gagner 8 lignes. 
Mais j'avoue que ce n'est pas toujours évidant à relire plus tard.
Et une version pour éviter d'avoir à gérer les lower/upper cases:
''.join(filter(lambda c: c.lower() not in "aeiouy", "Regarde les Mots!"))
Et pour tester :
1 2 3 4
| import string
''.join(filter(lambda c: c.lower() not in "aeiouy", string.ascii_letters))
'bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ' |
Partager