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 :

Exercice swinnen 10.7 question sur la solution et question d'ordres divers [Python 3.X]


Sujet :

Python

  1. #1
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut Exercice swinnen 10.7 question sur la solution et question d'ordres divers
    Bonsoir/bonjour,

    Voila je débute en python et j'ai attaqué la méthode swinnen (que j'apprécie énormément).

    j'ai un question sur la solution de l'exercice 10.7 à savoir:


    10.7: Dans un script, écrivez une fonction qui recherche le nombre de mots contenus dans une phrase données.

    cette partie du cours parlant de la syntaxe for ... in ..., j'ai naturellement cherché à faire quelques choses de plus simple avant de faire l'exercice avec for ... in ...

    le code avec for ... in ...:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def nombreMot(ch):
        if len(ch) == 0:
            return 0
        nm = 1
        for c in ch:
            if c == " ":
                nm+=1
        return nm
    code simplifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def nombreMot(ch):
        chs = ch.split()
        print(len(chs))
    Mes questions étant (après tout cette écriture pour ça):

    - Qu'elle est la différence ?
    - Quel code privilégié dans l'avenir ?
    - Pour débuter vaut-il mieux penser au code plus long mais qui apprennent mieux la programmation ?


    J'ai également d'autres question en dehors de la méthode swinnen mais qui sont en rapport à python:

    j'ai commencé python en autodidacte et c'est pas simple, plus que le C/C++ (où j'ai lâchement abandonné et décidé de m'orienté python) mais bon...

    Quelle méthode d'apprentissage me conseillez-vous afin de comprendre et d'apprendre python.

    J'ai eu beaucoup de mal avec Tkinter, à quoi sert-il exactement une fois le reptile maîtrisé ?

    Merci de m'avoir lu et dans l'attente d'une réponse.

    Bonne soirée ou bonne journée à tous et à toutes.

    Papyfouette

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Citation Envoyé par papyfouette Voir le message
    - Qu'elle est la différence ?
    Ben, elle est visuelle, le différence.
    - Quel code privilégié dans l'avenir ?
    Celui-ci (*)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> def nombre_mots(ch):
    ...     return ch.count(' ')
    ... 
    >>> nombre_mots("J'ai également d'autres question en dehors de la méthode swinnen")
    9
    >>>
    - Pour débuter vaut-il mieux penser au code plus long mais qui apprennent mieux la programmation ?
    C'est clair que les cours donnent régulièrement des exemples qui pourraient être simplifiés, mais l'intention est didactique évidement.


    (*) Ceci pour montrer qu'il n'y a pas UNE meilleure méthode, le résultat est faux, bien sur il y a douze mots.

  3. #3
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Pinaillons ...

    C'est une histoire de poteaux (espace(s)) et d'intervalles (mots). Comme souvent, il y a des "+1" qui se perdent.

    En plus, avec un fichier "quatre.txt" contenant :

    Sous MacOSX (linux dirait tout pareil), avec wc (word count) et l'option -w (que les mots) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    macBookAir:~ plxpy$ wc -w quatre.txt
           4 quatre.txt
    macBookAir:~ plxpy$
    Le split, sans surtout préciser l'espace comme séparateur, sinon, ça perd son initérêt, est une bonne approche : pas besoin de regrouper "à la main" les espaces
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  4. #4
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut
    Salut VinsS, plxpy,

    VinsS:

    Très bien c'est noté, je me doutais qu'il n'y avait pas une mais plusieurs solution en programmation et je constate qu'il y en a une infini, après choisir sa façon de programmer est tout un art apparemment !
    Quand on débute et qu'on connait pas toutes la diversité de python, c'est difficile d'apprendre son propre style de codage.

    plxpy:

    Ah oui, var.split(" ") et complètement différent de var.split(), si je dis pas de bêtise, en plus de compter les mots, var.split(" ") compte les espaces c'est bien ça ?

    Concernant le point sur MacOSX je t'avouerais être égaré car je ne connais pas du tout.

    Merci à vous deux, faut-il marquer résolu où attendre pour d'autres questions ?

  5. #5
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par papyfouette Voir le message
    Ah oui, var.split(" ") et complètement différent de var.split(), si je dis pas de bêtise, en plus de compter les mots, var.split(" ") compte les espaces c'est bien ça ?

    Concernant le point sur MacOSX je t'avouerais être égaré car je ne connais pas du tout.
    MacOSX (X, chiffre romain, donc 10) c'est juste la version 10 de l'OS d'Apple. De l'Unix-like.

    Je travaille en version 2(.7) et pas en 3, mais, en regardant la documentation, je n'ai pas l'impression qu'il y ait de gros changements.

    Sinon, effectivement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> "un deux".split()
    ['un', 'deux']
    >>> "un deux".split(' ')
    ['un', 'deux']
    >>> "un   deux ".split()
    ['un', 'deux']
    >>> "un   deux ".split(' ')
    ['un', '', '', 'deux', '']
    >>>
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  6. #6
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut
    Merci beaucoup pour l'aide apporté, je marque résolu et je n'hésiterais pas à reposer mes petites questions ^^

    Merci à vous deux.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par papyfouette Voir le message
    10.7: Dans un script, écrivez une fonction qui recherche le nombre de mots contenus dans une phrase données.
    cette partie du cours parlant de la syntaxe for ... in ...
    Mes questions étant:

    - Qu'elle est la différence ?
    - Quel code privilégié dans l'avenir ?
    - Pour débuter vaut-il mieux penser au code plus long mais qui apprennent mieux la programmation ?

    Quelle méthode d'apprentissage me conseillez-vous afin de comprendre et d'apprendre python.
    J'ai eu beaucoup de mal avec Tkinter, à quoi sert-il exactement une fois le reptile maîtrisé ?

    Papyfouette
    Bonjour,
    - La différence? Ainsi que vous le notez, le chapitre se rapporte au "for … in". Le premier script est donc le plus approprié. Mais d'autres scripts (avec cette même structure) sont, bien évidemment, équivalents s'ils font manipuler ce "for … in". Les autres méthodes n'ont pas d'intérêt immédiat.
    - Le code à privilégier? Celui qui fonctionnera, répondra au plus prêt à la question et qui gérera le plus de cas particuliers.
    - Longueur du code pour débuter? Aucun intérêt; il faut qu'il réponde à la question et qu'il utilise les connaissances afin de les manipuler. Par contre, un code clair, bien documenté et qui respecte les conventions de Python permet de bien commencer…
    - Méthode d'apprentissage? G. Swinenn est la bible française pour débuter.
    - Problème avec Tkinter. Il semble que cet exercice se situe avant les chapitres abordant Tkinter, non? Si c'est bien le cas, le tutoriel de G. Swinenn est très bien fait et guide pas-à-pas. Si ce n'est pas le cas, repasser le chapitre en refaisant l'ensemble des exercices peut être très productif!!
    Le rôle de Tkinter est de constituer une bibliothèque graphique très simple et efficace, nativement gérée par Python (toute version, tout OS).

    Et je rajoute mon bout de code!! ;-)

    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
    17
    18
    19
    20
    21
    22
    23
    24
    from string import punctuation, whitespace
     
    PHRASE = " Voila je débute en python et j'ai attaqué la méthode swinnen\
        (que j'apprécie énormément)."
     
    # tout ce qui est reconnu en tant que séparateur et espace par Python
    # il serait possible d'ajouter les chiffres.
    SEPARATEUR = punctuation + whitespace
     
    def compter_mots(phrase):
        # compteur du nombre de mots
        nb_mots = 0
        # mot en cours
        en_cours = False
        for car in phrase:
            if car in SEPARATEUR:
                en_cours = False
            else:
                if not en_cours:
                    en_cours = True
                    nb_mots += 1
        return nb_mots
     
    print(compter_mots(PHRASE))
    Clodion

  8. #8
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut
    Salut et merci de ta réponse Clodion,

    Justement le module Tkinter dans la méthode de Gérard Swinnen est justement avant, chapitre 8 exactement.
    J'ai vraiment eu du mal et je vais écouter ton conseil et me refaire le chapitre 8, une fois celui-ci fini.

    D'accord, encore une autre façon et plus technique de programmer le compteur de mot.

    D'ailleurs, grâce à tes explications, j'ai une autre question concernant les conventions:

    Comment savoir si mon code respect les conventions ?

    je vais te mettre un extrait de code qui va ou vous faire grincer des dents et pourtant il est tout aussi pratique malgré sa difficulté de compréhension.


    Inverser une liste code conventionnel(je suppose):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste = [1,2,3,4,5,6,7,8,9,10]
    liste.reverse()
    print(liste)
    [10,9,8,7,6,5,4,3,2,1]
    Inverser une liste mode non conventionnel(je suppose):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    liste = [1,2,3,4,5,6,7,8,9,10]
    print(liste[::-1])
    [10,9,8,7,6,5,4,3,2,1]

  9. #9
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par papyfouette Voir le message
    Comment savoir si mon code respect les conventions ?
    Bonsoir,
    Désolé de ne pas avoir répondu plus tôt!
    - Respect des conventions de codage: lire la PEP8 est un bon début et résume les principales conventions! Et ne pas oublier que "on passe plus de temps à relire un code qu'à l'écrire" (je ne sais pas de qui provient ceci, mais c'est, je pense, toujours d'actualité).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste.reverse()
    liste[::-1]
    Il y a déjà une première différence, dans le premier cas la liste est elle-même modifiée alors que dans le second c'est une liste renvoyée.
    Hors ceci, je pense que pour des raisons de lisibilité et d'optimisation, la première solution est plus adéquate.
    La deuxième forme est bien plus souple mais peut nécessiter des explications, alors que ce n'est pas utile pour la première!

    Bonne soirée,
    Clodion

    PS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> lst = [x for x in range(1,11)]
    >>> lst
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> id(lst)
    139791658226184
    >>> lst.reverse()
    >>> lst
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    >>> id(lst)
    139791658226184
    La fonction id renvoie la position mémoire d'un objet (cf: "help(id)").
    Ce bout de code pour montrer que la méthode "reverse()" réalise bien une inversion sur place de la liste et pas une copie.

  10. #10
    Membre régulier
    Homme Profil pro
    employé
    Inscrit en
    Mars 2015
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Mars 2015
    Messages : 75
    Points : 103
    Points
    103
    Par défaut
    Bonsoir Clodion,

    Merci beaucoup pour l'aide apporté, j'y vois plus clair maintenant et ne manquerais pas de lire la convention à tête reposé.

    Merci et bonne soirée à toi.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/09/2011, 11h31
  2. Quelques questions sur les solutions PHP sous Eclipse
    Par Djakisback dans le forum Eclipse PHP
    Réponses: 2
    Dernier message: 16/04/2011, 13h26
  3. Question d'architecture, aiguillage sur meilleure solution
    Par yannlejunter dans le forum Services Web
    Réponses: 1
    Dernier message: 19/05/2009, 10h25
  4. question sur exercice de conversion.
    Par stephe69 dans le forum Général Python
    Réponses: 1
    Dernier message: 09/04/2009, 20h03
  5. Petite question sur exercice Java
    Par romain1 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 01/09/2008, 11h37

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