IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème : exercice de récursivité.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 4
    Par défaut Problème : exercice de récursivité.
    Bonjour, je rencontre un problème concernant un exercice :

    Je dois créer une fonction deepconcat(liste) qui parcourt la liste et retourne un string qui est la concaténation de tous les éléments de cette dernière, tout cela en utilisant la récursivité.

    Exemple : deepconcat(["a",["b","6"],"e",["5",["g","h"]],"i"]) retourne "ab6de5ghi".

    Les éléments de la liste peuvent donc être des sous-listes, ces dernières pouvant elles-même contenir des sous-listes.

    Merci de votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2018
    Messages : 69
    Par défaut
    Bonjour.

    C'est dommage si tu n'essaie pas par toi même mais essaie de faire une fonction qui retourne
    chaque élément du tableau et si un des éléments du tableau en est un alors tu relance la fonction.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par SupaFlamme Voir le message
    Bonjour, je rencontre un problème concernant un exercice :
    Et quel est ce problème ? Parce que là, tu nous as donné l'énoncé de l'exercice mais rien dit sur le problème que tu rencontres...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 699
    Par défaut
    Salut,

    Si vous ne postez pas un peu de code, non seulement on ne connaît pas la difficulté que vous rencontrez (et quoi vous expliquer) mais en plus on ne sait pas trop quel style de Python, vous êtes autorisé à utiliser.

    Donc on peut vous proposer une solution "récursive" cuisinée pour le plaisir du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def deepconcat(alist):
     
        def flatten(alist):
            for e in alist:
                if isinstance(e, list):
                    yield from flatten(e)
                else:
                    assert isinstance(e, str)
                    yield e
     
        return ''.join(e for e in flatten(alist))
    mais si vous n'avez pas encore étudié les constructions que j'utilise, il y a de fortes chances que vous ne compreniez pas ce code.
    Pire comme vous sortez du cadre des concepts que vous avez appris, l'exo étant là pour vous assurer que vous savez les utiliser... A la place de votre professeur, soit êtes pas capable de m'expliquer et je vous mets la moitié de la note soit c'est zéro direct.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 4
    Par défaut
    Voilà mon code pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def deepconcat(l) :
         new_l = []
         if l == [] :
             return None
         elif len(l) == 1 :
             return l[0]
         else :
             for i in l :
                 if type(i) == str :
                     return l[0] + deepconcat(l[1:])
                 if type(i) == list :
                     new_l = l[0] + deepconcat(l[1:])
                     return "".join(new_l)

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Vous semblez ne pas être loin du compte.

    Indice pour vous : que se passe t il si vous appelez la fonction deepconcat en lui passant simplement une chaine de caractere ?

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Vous semblez ne pas être loin du compte.

    Indice pour vous : que se passe t il si vous appelez la fonction deepconcat en lui passant simplement une chaine de caractere ?
    Vous ne suivez pas ce qu'on vous a dit ! Là vous voyez bien que si vous passez un string à votre fonction rien ne se passe comme il le faudrait !

    Donc ce qu'il vous faut c'est une structure :

    def deepconcat(liste_or_str):
         si liste :
               faire une concaténation (join) de deepconcat appelé sur tous les éléments
               ceci retourne un str
         sinon :  (on supposera que c'est alors un str)
               retourner liste_or_str (ici on a rien a faire, on a deja un str en entrée)

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 699
    Par défaut
    Citation Envoyé par SupaFlamme Voir le message
    Voilà mon code pour le moment :
    Maintenant, il manque "je teste ce code avec la liste XYZ, çà me retourne autre chose qu'attendu" et une relecture plus attentive de votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             for i in l :
                 if type(i) == str :
                     return l[0] + deepconcat(l[1:])
    On dirait que çà va balayer toute la liste alors que la fonction se termine en fonction du type du premier élément: il sert à quoi ce "for"?

    Reprenez le problème depuis le début: à partir de:
    ["a",["b","6"],"e",["5",["g","h"]],"i"].
    Le premier appel doit produire:
    "a" + deepconcat(["b","6"]) + "e" + deepconcat(["5",["g","h"]]) + "i".
    qu'on peut ré-écrire:
    ''.join([ "a", deepconcat(["b","6"]), "e", deepconcat(["5",["g","h"]]), "i"]).
    ou encore: ''.join(new_list).
    Donc la boucle "for" construit une newlist et le return est après le .join.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Si on cherche un peu en anglais, avec flatten list et python, on trouve son bonheur !

    Son utilisation est simple,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(''.join(flatten(["a",["b","6"],"e",["5",["g","h"]],"i"])))

Discussions similaires

  1. Problème exercice récursivité de listes/arbres
    Par infoJava67 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 06/01/2018, 02h19
  2. [Flex/Bison] problème avec la récursivité
    Par la_praline dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 09/09/2008, 13h41
  3. [ DEBUTANT ] Problème exercice boucle + récursive
    Par arnaud405 dans le forum Caml
    Réponses: 37
    Dernier message: 06/11/2007, 01h39
  4. Problème exercice facile
    Par arnaud405 dans le forum Caml
    Réponses: 17
    Dernier message: 04/10/2007, 22h30
  5. Problème Exercice Débutant
    Par nanoute dans le forum C
    Réponses: 34
    Dernier message: 19/05/2007, 17h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo