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 :

Swinnen exercice 10.32 [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut Swinnen exercice 10.32
    Bonjour,
    J'ai fait l'exercice 10.32. Mais mon code est compliqué. Quelqu'un peut me montrer plus simple?
    Je suis surpris que la fonction append() ne semble pas fonctionner sur un type string. Pourtant il me semblait que le type string était une forme de liste.
    Bonne fin d'année...

    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
    #script qui recherche le mot le plus long dans une phrase donnée
    phrase = input("Saisir une phrase : ")+ " " 
    nbr = 0
    nbmax = 0
    mot = []
    i = 0
     
    while i < len(phrase):
        if phrase[i] == " ": #si on change de mot
            if nbr >= nbmax: # test longueur du mot
                nbmax = nbr
                motmax = mot
            nbr = 0
            mot = []
     
        else :
            nbr = nbr + 1
            mot.append(phrase[i])
     
        i = i + 1
     
    print("".join(motmax) + " est le mot le plus long avec "+ str(nbmax) + " lettres")

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Dans la mesure où les mots sont séparés par des espaces, un truc comme ça devrait marcher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    motlepluslong = sorted(phrase.split(), key=lambda v: len(v))[-1]
    .split() crée la liste des mots à partir de la phrase
    sorted renvoie la liste triée, mais la clé pour ce tri (key) est la longueur de chaque mot
    [-1] renvoie le dernier mot, donc le plus long

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Bonjour

    Non, la méthode append n'existe pas pour des chaînes de caractères ! Le type str n'hérite pas du type list.
    Mais tout deux sont des séquences avec une différence fondamentale. Une liste est mutable alors qu'une chaîne
    ne l'est pas. Or, append modifiant la liste "sur place", ne peut pas s'appliquer à une chaîne de caractère puisque celle-ci
    ne peut être modifiée sur place.

    Cependant, dans ton code, mot est bien une liste donc ça doit fonctionner.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 219
    Par défaut
    hello,
    ceci devrait fonctionner aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    motlepluslong = max(phrase.split(), key=len)
    On utilise la fonction intégrée len() , la longueur de chaîne, comme clé pour trouver le mot le plus long.
    Il reste cependant le problème : que faire quand on a plusieurs mots les plus longs ?

    Ammi calmant, J.P

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par loncle Voir le message
    J'ai fait l'exercice 10.32. Mais mon code est compliqué. Quelqu'un peut me montrer plus simple?
    Le Swinnen essaie de vous apprendre à programmer mais néglige un peu Python.
    C'est un peu dommage lorsqu'on voit ce genre de construction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    i = 0
    while i < len(phrase):
        if phrase[i] == " ":
           ...
        else :
            ...
            mot.append(phrase[i])
        i = i + 1
    Python permet d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for c in phrase:
            if c == ' ':
                 ...
            else:
                mot.append(c)
    "phrase" étant une séquence de caractères est un iterable (for c in...): pas besoin de passer par les index même si beaucoup d'autres langages de programmation ne laissent pas le choix.
    Comme vous connaissez "len" (vous avez écrit: "while i < len(phrase):"), pourquoi trimbaler le calcul de "nbr" et de "nbmax"?
    Ca donnerait:
    mot_max = mot = []
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for c in phrase:
        if c == " ": #si on change de mot
            if len(mot) > len(mot_max): # test longueur du mot
                mot_max = mot
            mot = []
        else :
            mot += [c]     
    print("".join(mot_max) + " est le mot le plus long avec "+ str(len(mot_max)) + " lettres")
    Après bien sûr, comme on écrit ce genre de code assez souvent, les bibliothèques Python ont en général des solutions prêtes à l'emploi.
    Mais c'est pour quand on en a marre de se répéter et/où qu'on a à écrire des codes plus compliqués.

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

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

Discussions similaires

  1. Livre de Swinnen Exercice 8.13
    Par Piett dans le forum Tkinter
    Réponses: 1
    Dernier message: 12/03/2008, 11h18
  2. Obtenir la solution exercices du bouquin Swinnen
    Par rlejeune dans le forum Général Python
    Réponses: 1
    Dernier message: 26/08/2007, 04h53
  3. Réponses: 3
    Dernier message: 22/12/2005, 00h40
  4. [Cours Swinnen][Tkinter] bloqué à un exercice
    Par babar89 dans le forum Tkinter
    Réponses: 4
    Dernier message: 18/10/2005, 16h48
  5. [cours de G.Swinnen] exercice 66
    Par airod dans le forum Tkinter
    Réponses: 4
    Dernier message: 14/10/2005, 11h02

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