Remplacer un mot dans une liste comme en LISP
As_Myers
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour ,
Je suis bloqué sur une fonction en Python je n'arrive pas à comprendre où se trouve mon erreur.
Je dois créer une fonction en python qui remplace un mot par un autre lorsqu'on le trouve dans une liste. Pour tester les fonctions j'ai décidé de remplacer le mot "chat" par le mot "chien".
Le but de l'exercice était de reprendre une fonction que j'ai faite en LISP, de la traduire en C, puis en Python.
Mais pour celle en Python je ne comprends pas pourquoi seulement la première occurrence du mot est traitée:
Voici ma fonction :
L = ['chat', 'loup', 'pieuvre', 'chat', 'loutre', 'rat']
> remplace(L, "chat", "chien")
> L
['chien', 'loup', 'pieuvre', 'chat', 'loutre', 'rat']
Merci beaucoup pour votre aide.
Je suis bloqué sur une fonction en Python je n'arrive pas à comprendre où se trouve mon erreur.
Je dois créer une fonction en python qui remplace un mot par un autre lorsqu'on le trouve dans une liste. Pour tester les fonctions j'ai décidé de remplacer le mot "chat" par le mot "chien".
Le but de l'exercice était de reprendre une fonction que j'ai faite en LISP, de la traduire en C, puis en Python.
Mais pour celle en Python je ne comprends pas pourquoi seulement la première occurrence du mot est traitée:
Voici ma fonction :
def remplace(L, toto, tata) : if not L : return None if L[0] == toto : L[0] = tata #si (car L) == toto je le remplace par tata return remplace(L[1:], toto, tata) #je passe à la suite de la liste (cdr L)
L = ['chat', 'loup', 'pieuvre', 'chat', 'loutre', 'rat']
> remplace(L, "chat", "chien")
> L
['chien', 'loup', 'pieuvre', 'chat', 'loutre', 'rat']
Merci beaucoup pour votre aide.
A voir également:
- Remplacer un mot dans une liste comme en LISP
- Liste déroulante excel - Guide
- Remplacer un mot dans word - Guide
- Trousseau mot de passe iphone - Guide
- Liste déroulante en cascade - Guide
- Remplacer disque dur par ssd - Guide
1 réponse
C'est une méthode récursive. La fonction va considérer que ta liste est constitué d'un premier élément et d'une sous-liste. Il va regarder si ce premier élément est l'élément recherché puis le remplace et/ou passe à la suite (la sous-liste).
Le programme s'arrête lorsqu'il reste un élément : il s'agit du premier élément (donc le dernier) et une liste vide. Il regarde si cet élément est l'élément recherché sinon, il exécute à nouveau ta fonction avec la liste vide. Et là, tu entres dans ton premier if et il renvoie None (rien). Et tu dépiles toutes les niveaux de récursivité.
Le programme s'arrête lorsqu'il reste un élément : il s'agit du premier élément (donc le dernier) et une liste vide. Il regarde si cet élément est l'élément recherché sinon, il exécute à nouveau ta fonction avec la liste vide. Et là, tu entres dans ton premier if et il renvoie None (rien). Et tu dépiles toutes les niveaux de récursivité.