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 :

Aide pour un exercice Python3.


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 27
    Par défaut Aide pour un exercice Python3.
    Bonjour à tous et merci d'avance à ceux qui prendront le temps de m'aider.

    J'apprends le langage python depuis peu et je suis bloqué sur un exercice qui ne doit pas être très compliqué, voici l'intitulé de l'exercice:

    Définissez une fonction compteMots(ph) qui renvoie le nombre de mots contenus
    dans la phrase ph. On considère comme mots les ensembles de caractères inclus entre
    des espaces.


    Comme c'est un exercice pour débuter il faut que j'utilise une boucle while mais je n'arrive pas à comprendre comment gérer les espaces en effet je n'arrive qu'à compter le nombre de caractères mais pour gérer l'espace je ne sais pas ou le mettre voici mon début de solution ( ne rigolez pas..):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def compteMots(ph):
       i,mots = 0,0
       while i < len(ph):
          mots = mots + 1
          i = i + 1
       return mots
     
    print(compteMots("Aidez moi lol"))
    Voila merci beaucoup.

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> def compteMots(ph):
    ...     return len(ph.split())
    ... 
    >>> print(compteMots("Aidez moi lol"))
    3
    >>> def compteMots(ph):
    ...     print(ph.split()) # Pour comprendre
    ... 
    >>> compteMots("Aidez moi lol")
    ['Aidez', 'moi', 'lol']
    Sauf si le while est obligatoire (ce qui est regrettable).

    @+

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Bonjour,

    Sauf si le while est obligatoire (ce qui est regrettable).

    @+
    Salut, Dans les tutos et cours pour débutant (voir Swinnen) on demande toujours de réaliser au moyen d'une fonction de dix lignes ce qui peut se résoudre en une instruction.

    Une piste pour Asimoov:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    txt = "un deux trois"
    while txt == "un deux trois":
        count = len(txt.split(" "))
        txt = "eureka"
    print count
    Normalement on distribue ceci sous licence WTPFL-2

    p.s. j'espère que rien de tout ceci n'a changé dans Python3 ...


    edit: En fait si, print demande des parenthèses, Asimoov, tu corriges hein.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 27
    Par défaut
    Merci à tous les deux pour votre aide ainsi que pour la rapidité et la qualité de vos réponses

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    ? On parle bien de fonction non ?

    Citation Envoyé par Asimoov Voir le message
    Définissez une fonction compteMots(ph) qui renvoie le nombre de mots contenus
    dans la phrase ph. On considère comme mots les ensembles de caractères inclus entre
    des espaces.
    Soit ce qui donne pour un débutant un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def compteMots(ph):
        index = 1 # Pas d"espace avant le premier mots.
        isexit = False # Pour le while.
        while not isexit: # Donc 'si isexit n'est pas True > on continue.
            for car in ph: # Lecture caractere par caractere.
                if car == ' ': # Si c'est un espace
                    index += 1 # Rajoute 1 a index. Pour rappel index commance a 1 car pas d'espace avant
            isexit = True # Sortie du for car in ph. Sauf si le dernier caractere n'est pas un espace c'est bon
        return index # Retourne l'index (faux donc si le dernier caractere est un espace).
    print(compteMots("Aidez moi lol Aidez moi lol "))
    (A noter : dix lignes. Je rigole)
    Je ne comprend pas cette approche.

    @+

    Edit : A comprendre pour Asimoov que dans un cas d'un print(compteMots("Aidez moi lol Aidez moi lol")) la personne juge cela comme bon.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    L'approche, c'est que le bouquin de Swinnen ne se contente pas d'enseigner Python mais aussi la programmation. Il s'agit ici de réaliser un programme avec les constructions du langage qui ont été vues jusque là, sans dépendre de la richesse des structures de données et des librairies de Python. Il s'agit d'écrire un algorithme et de l'implémenter, pas de trouver dans la librairie Python la fonction qui fait ce qui est demandé.

    Une suggestion pour Asimoov: reste sur ton schéma initial. Tu peux compter les transitions entre espaces et mots. Cela peut se faire avec une variable booléenne qui indique si tu es dans un mot ou pas. Le compteur est incrémenté lorsque cette variable passe de False à True. Cette variable est initialisée à False afin que le premier mot soit compté même s'il n'est pas précédé d'espaces.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def compteMots(ph):
       dans_mot = False
       i,mots = 0,0
       while i < len(ph):
          ...
          i = i + 1
       return mots

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    J'avais bien compris dividee. Je voulais juste dire qu'une réponse 'qui marche pour l'exemple donné' (comprendre mon exemple bidon) est vite comprise pour acquise.
    J'ai sans doute un rejet de l'utilisation à l'outrance du while dans les tutos (entre autre).

    @Asimoov : J'allais me reprendre avec un code plus 'proche de ce qui est demander' mais la réponse de dividee est juste, reste sur cette voie.

    Bon code

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 27
    Par défaut
    Bonsoir et encore merci pour vos réponses.

    dividee votre exemple ressemble effectivement plus à ce que je suis en train d'apprendre pour le moment mais j'ai malheureusement pas compris la variable booléenne comment dois-je l'utiliser concrètement je ne sais pas si c'est l'heure tardive qui m'empêche de réfléchir mais je trouves pas la solution si vous pouviez m'expliquer d'avantage je vous en remercie par avance.
    Je reprendrais demain à tête reposée là je n'arrives plus à rien

    Désolé encore de vous faire perdre votre temps.

  9. #9
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Ce que dividee te propose c'est de tester si tu est dans un mots ou pas. Style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ph[index] != " " and dans_mot == False:
        dans_mot = True
    Dans ce cas dès que ph[index] == " " et dans_mot == True c'est que tu est en fin du mots donc mots = mots +1 et dans_mot = False (etc).
    Ceci n'est qu'un exemple et de plus il y a un piège. Que se passe t'il si le dernier caractère et différent de " " dans mon exemple ? (Tout dépend de la valeur de mots au début)
    A toi de remplir les ...

    Bon code

    PS: Je continu a penser qu'un simple for car in ph et préférable au while... Bon ok --->[]

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 27
    Par défaut
    Bonjour, alors je dois pas être doué mais bon je vais avancer dans le livre et j'essaierais de refaire l'exercice mais j'ai du mal voici mon début de solution grâce à votre aide mais effectivement je n'arrive pas à gérer la fin de phrase ( ca doit être simple mais je suis vraiment un gros débutant):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    def compteMots(ph):
        i,mots,dans_mot = 0,0,False
     
        while i < len(ph):
            if ph[i] != " " and dans_mot == False:
                dans_mot = True
                mots = 1
     
            if ph[i] == " " and dans_mot == True:
                mots = mots + 1
     
            i = i + 1
     
        return mots
     
    print(compteMots("bip bip meuh"))
    Et merci une fois de plus pour l'aide que vous m'avez apportée.

  11. #11
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Votre code fonctionne pourtant. On parle dans l'exercice de On considère comme mots les ensembles de caractères inclus entre
    des espaces.
    mais c'est moi qui ai rajouter l'histoire de l'espace avant ou après.
    Une version proche de la votre mais avec for pour vous laisser chercher votre solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def compteMots(ph):
        mots, dans_mot = 1, False
        if ph[len(ph)-1] == " ":
            mots = 0
        for car in ph:
            if car != " " and dans_mot == False:
                dans_mot = True
            elif car == " " and dans_mot == True:
                dans_mot = False
                mots += 1
        return mots
    print(compteMots(" Aidez moi  lol Aidez  moi   lol Aidez  moi lol bip  bip meuh  "))
    Bon code

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 27
    Par défaut
    Bonsoir, merci beaucoup pour vos réponses elles me permettent d'apprendre de nouvelles façons de procéder. Je pense avoir compris le raisonnement pour arriver au résultat souhaité avec "ma" méthode mais il est vrai que c'est plus pratique avec split() ou encore for in.

    Encore merci pour le temps que vous m'avez accordé c'est vraiment sympa.

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Bonsoir, la complexité introduite pour la gestion de fin de phrase provient du fait que vous comptez les fins de mots. Je suggérais de compter les débuts de mots; c'est plus simple car le fait d'initialiser dans_mot à False équivaut à l'ajout d'un espace en début de chaîne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def compte_mots(ph):
        mots, dans_mot = 0, False
        for car in ph:
            if car == " ":
                dans_mot = False
            elif not dans_mot:
                dans_mot = True
                mots += 1
        return mots
    J'ai aussi utilisé un for car le while est ici très artificiel et j'oublie souvent le "i=i+1" dans un while

  14. #14
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par dividee Voir le message
    J'ai aussi utilisé un for car le while est ici très artificiel et j'oublie souvent le "i=i+1" dans un while
    (+1 pour moi Pardon ? Ok... --->[])

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Besoin d'aide pour un exercice
    Par bebetoalvaro dans le forum Pascal
    Réponses: 9
    Dernier message: 05/02/2007, 01h59
  2. Besoin d'aide pour un exercice sur les registres
    Par zakuza dans le forum Assembleur
    Réponses: 5
    Dernier message: 14/04/2006, 14h23
  3. Aide pour un exercice
    Par nelob dans le forum Assembleur
    Réponses: 5
    Dernier message: 02/03/2006, 23h46
  4. Demande d'aide pour un exercice
    Par IDE dans le forum C
    Réponses: 3
    Dernier message: 29/10/2005, 15h09

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