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

Exercices Python Discussion :

exercice recursivité python


Sujet :

Exercices Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 9
    Points
    9
    Par défaut exercice recursivité python
    Bonjour à tous, je dois créer un programme qui consiste à retourner le nombre de fois que la lettre est rencontré dans la chaine de caractère sans utiliser count avec une fonction récursive j'aurais besoin d'aide svp
    lettre doit être de type str je ne dois pas utiliser print ou input.
    j'ai défini la variable mot et j'ai dis que comme quoi lettre est de type str
    là si j'ai bien compris je dois parcourir mots lettre par lettre puis si une lettre est pareil que la lettre qu'on veut ? merci de votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def compter(texte,lettre):
        mots=""
        if type(lettre) is str:
            return True
        if type(lettre) is not str:
            return False
        if texte[0]==lettre:
            return 1+compter(texte[1:],lettre)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Commencez par écrire une fonction qui compte les occurrences de lettre dans mots en itérant sur chaque caractère de mots.
    A l'intérieur de la boucle vous allez devoir comparer mots[i] avec lettre.
    Comme mots est un str, mots[i] sera une chaine de caractères à un seul élément.

    Et si lettre n'est pas une chaine de caractère à un seul élément ou un objet d'un autre type, la comparaison retournera faux.

    Une fois que vous aurez compris que le type de vos données n'a pas grande importance, vous pourrez ré-écrire votre boucle de façon récursive.

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

  3. #3
    Futur Membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 9
    Points
    9
    Par défaut
    du coup je dois commencer par faire un for range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in range(len(mots)):

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Citation Envoyé par amina3020- Voir le message
    du coup je dois commencer par faire un for range

    for i in range(len(mots)):
    voilà... et vous écrivez le reste.
    Ce qui va vous faire une fonction compter à deux arguments (comme la mouture récursive).
    Lorsque çà fonctionnera, vous allez pouvoir lui passer différents arguments pour la tester.

    Et vous aurez alors matière à réfléchir à l'intérêt de tester le type des arguments.

    Et normalement, si çà à du sens, s'appliquera pareil à une fonction récursive.

    Vous noterez aussi que l'appelant de la fonction peut ignorer complètement que la fonction soit récursive ou itérative: elle sera appelée avec les mêmes arguments et doit retourner le même résultat.

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

  5. #5
    Futur Membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Commencez par écrire une fonction qui compte les occurrences de lettre dans mots en itérant sur chaque caractère de mots.
    A l'intérieur de la boucle vous allez devoir comparer mots[i] avec lettre.
    Comme mots est un str, mots[i] sera une chaine de caractères à un seul élément.

    Et si lettre n'est pas une chaine de caractère à un seul élément ou un objet d'un autre type, la comparaison retournera faux.

    Une fois que vous aurez compris que le type de vos données n'a pas grande importance, vous pourrez ré-écrire votre boucle de façon récursive.

    - W
    voila la fonction qui compte les occcurences de lettre dans mots comme vous m'aviez dis de faire mais je n'ai pas compris m'y prendre pour la suite il faut que fasse deux fonction séparément c'est ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def compter(mots,lettre):
        nombre=0
        for i in mots:
            if i==lettre:
                nombre= nombre+1
        return nombre
    print(compter("elle",'l'))

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Mon propos était de vous sortir de l'embarras d'avoir à tester le type des arguments (mots et lettre) ou d'expliquer pourquoi cela vous paraissait nécessaire.

    Vous voyez que çà fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> compter('elle', 'e')
    2
    >>> compter('elle', 'x')
    0
    >>> compter('elle', 2)
    0
    >>>>>> compter('axaxaxax', 'ax')
    0
    sans qu'on s'en préoccupe.

    Vous allez donc pouvoir vous attaquer plus sereinement à l'exercice demandé i.e. écrire la fonction sous forme récursive...

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

  7. #7
    Futur Membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 9
    Points
    9
    Par défaut
    d'accord en utilisant toujour le for i in range(len(mots)) pour pouvoir parcourir chaque lettre de mots
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    def compter(mots,lettre):
        for i in range(len(mots)):
            if mots[i] == lettre:
    la j'ai fais la comparaison et donc je dois return en faisant lettre= lettre+1 c'est ça ?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Citation Envoyé par amina3020- Voir le message
    la j'ai fais la comparaison et donc je dois return en faisant lettre= lettre+1 c'est ça ?
    lettre est à priori une constante qui représente la lettre qu'on compte. Pourquoi écrire lettre = lettre + 1.
    Après écrire une fonction récursive, c'est remplacer des itérations par des appels à une fonction récursive.
    Exemple: la somme des n premiers entiers peut s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def somme(n):
          s = 0
          for i in range(n+1):
               s += i
          return s
    Si on écrit çà de façon récursive, on vire la boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def somme(n):
          if n == 0:
             return 0
          return n + somme(n-1)
    pour la remplacer par une condition d'arrêt sinon on part en appel récursif.

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

  9. #9
    Futur Membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Février 2020
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Février 2020
    Messages : 61
    Points : 9
    Points
    9
    Par défaut
    donc je dois retourner quoi franchement je n'ai pas compris à partir de ce moment

    c'est meilleure la ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def compter(mots,lettre):
        for i in mots:
            if mots[0]== lettre:
                return 1+compter(mots[1:],lettre)
            else:
                return compter(mots[1:],lettre)

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    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 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Citation Envoyé par amina3020- Voir le message
    donc je dois retourner quoi franchement je n'ai pas compris à partir de ce moment
    Retourner, c'est ce qu'il a après "return" et dans votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            if mots[0]== lettre:
                return 1+compter(mots[1:],lettre)
            else:
                return compter(mots[1:],lettre)
    c'est correct.

    Par contre, l'instruction for i in mots: qui précède n'a rien à faire là puisque vous remplacez des itérations par de la récursion... Et il manque la condition sur mots vide.

    De plus si vous essayiez votre code avant de le poster, vous sauriez déjà qu'il ne fait pas le job.

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

Discussions similaires

  1. [Python 3.X] [Histogramme]exercice Apprendre Python de G. Zwinnen
    Par bergenist dans le forum Général Python
    Réponses: 4
    Dernier message: 15/10/2015, 00h43
  2. Exercice Tp Python Licence
    Par lorli911 dans le forum Général Python
    Réponses: 4
    Dernier message: 01/05/2015, 18h29
  3. Exercice en python besoin de votre aide
    Par Takahitekun dans le forum Général Python
    Réponses: 6
    Dernier message: 14/01/2013, 16h10

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