Implémentation de liste avec liste chaîne

a marqué ce sujet comme résolu.

Tes trois premières fonctions sont bonnes, je dirais juste qu’il est préférable de faire lst is None que lst == None (None étant un singleton, et l’opérateur d’identité is ne pouvant être surchargé, on est alors sûr d’avoir bien None).

longueur_rec est presque bien, tu subdivises chaque nœud entre tête et queue et tu continues récursivement à compter les éléments, mais pas sur la bonne liste.

Par contre ça bloque sur longeur_it qui ne calcule pas la taille de la liste : elle te renvoie la taille de lst qui est un tuple de 2 éléments… donc 2. Il faudrait que tu adoptes un comportement semblable à longueur_rec (itérer sur les queues).

Ce n’est pas ajoute_texte, mais ajoute_tete. Il y a une raison à cela. Dans les listes, on appelle habituellement tête (head) le premier élément et queue (tail) le reste. Voir le message de @entwanne, qui n’a pas choisi ses noms par hasard.

Édit : on a répondu entre temps, je ne garde que la partie utile du message.

+0 -0

Hein ? Tu peux tester cette fonction seule.

Si tu ne vois vraiment pas comment, écris la fonction manquante d’abord…

EDIT : c’est un peu pénible cette manie d’éditer tes messages entre les réponses, ça rend la discussion difficile à suivre… :-° Ça ne va pas fonctionner si tu donnes None à ta fonction directement.

+1 -0

Si tu appelles longueur_rec(vide()) tu obtiens une exception TypeError: 'NoneType' object is not subscriptable, au lieu de 0.

EDIT : merci de ne pas supprimer les premiers messages… Ce n’est vraiment pas respectueux envers les autres utilisateurs de rendre la discussion illisible a posteriori…

+2 -0

Euh désolé j’avais mal relu la condition… Mais tu as encore la même erreur que précédemment quand tu passes directement None à ta liste donc tu devrais voir que ce n’est pas bon.
Pense à tester tes fonctions avant de nous les présenter.

Mais pourquoi cherches-tu une « autre façon », celle-ci ne te suffit pas ?

mince je me suis embrouillé j’ai oublier de l’enlever donc

def longueur_rec(lst):
    if lst[1] == None:
        return 0    
    else:
        lst = lst[1]
        return 1 + longueur_rec(lst)

Essaye ta fonction ! :-° Tu as réécris une fonction qui te donnait une erreur si tu lui donnes une liste vide, et maintenant les longueurs ne sont pas bonnes. Réfléchis à ce que tu écris et teste au lieu de combiner au pif en espérant que ça marche…

pensez-vous qu’il y a une aure façon de le faire si oui vous ^pouvez me la donner svp

maxime835

Certainement pas, on ne va pas écrire du code à ta place…

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte