Remplacer un mot dans une liste comme en LISP

Fermé
As_Myers Messages postés 1 Date d'inscription mercredi 24 février 2016 Statut Membre Dernière intervention 24 février 2016 - Modifié par As_Myers le 24/02/2016 à 16:22
 Utilisateur anonyme - 24 févr. 2016 à 21:33
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 :

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:

1 réponse

Utilisateur anonyme
24 févr. 2016 à 21:33
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é.
0