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 :

Séparation et sélection de mots dans un texte qui ne s'affichent pas correctement


Sujet :

Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Séparation et sélection de mots dans un texte qui ne s'affichent pas correctement
    Bonjour,

    J'ai un problème sur l'une de mes fonctions.
    J'ai d'abord créé une fonction qui sépare chaque mot de mon texte, puis une deuxième qui sélectionne les mots de 3 caractères ou moins.
    Sauf que pour la deuxième, je ne comprends pas pourquoi le résultat s'affiche comme cela et j'ai l'impression que cela interfère avec le reste de mon programme.
    Y-a-t'il une autre manière de le programmer pour que le résultat s'affiche autrement ?

    Voici mon 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
     
    texte = "Rangement de six élèves par rang de deux"
     
    def Separe(texte):  #--> fonction qui sépare les mots de tout le texte
        x = texte.split()
        return x
     
    def Select(texte):  #--> fonction qui sélectionne les mots de 3 lettres ou moins
        S = [""]
        sep = Separe(texte)
        for i in range (0,len(sep)):
            if len(sep[i]) <= 3:
                S = S , sep[i]
        return S
    Et la réponse est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> Select(texte)
    (((([''], 'de'), 'six'), 'par'), 'de')

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

    S = S , sep[i] assigne à S le tuple formé par S et sep[i]...
    Et à chaque itération on imbrique le dernier S dans un nouveau niveau de parenthèse.

    A priori, ce que vous cherchez à faire, c'est fabriquer la liste des mots.
    Donc à chaque itération ajouter un mot à S si sa longueur...

    Je vous laisse retrouver le chapitre de votre tuto. préféré qui parle des listes (parce que c'est là qu'on explique comment ajouter un objet à une liste).

    Avec Python, on écrira çà plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> [ s for s in texte.split() if len(s) <= 3 ]
    ['de', 'six', 'par', 'de']
    >>>
    Mais avant d'en arriver là, passer du temps à comprendre comment utiliser les objets de base et essayer de faire les exercices (corrigés) des tutos est une étape indispensable.

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

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 678
    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 678
    Points : 30 965
    Points
    30 965
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par JeMePoseDesQuestions Voir le message
    Et la réponse est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>> Select(texte)
    (((([''], 'de'), 'six'), 'par'), 'de')
    Il faut remplacer S=S, sep[i] par S=S+[sep[i],].
    Ensuite tu pourras te former aux "listes en intension" qui, comme le montre wiztricks, peuvent générer ce type de résultat en 1 ligne.
    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
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    à titre indicatif, pour ce genre de problème on peut aussi utiliser les expressions régulières
    voici une solution au problème posé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import re
    texte = "Rangement de six élèves par rang de deux"
    p = re.compile(r'\b\w{1,3}\b')
    print(p.findall(texte))
    Résultat :
    ['de', 'six', 'par', 'de']
    explication :
    motif \b\w{1,3}\b : les mots de 1 à 3 caractères entourés par des séparateurs de texte.

    • \w : word metacharacter : une lettre [a-z] [A-Z] ou lettre accentuée, un chiffre [0-9] ou '_'.
    • \b : word boundary metacharacter : espace, ponctuation, le début du texte, la fin du texte

    findall : on recherche toutes les occurrences.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 678
    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 678
    Points : 30 965
    Points
    30 965
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    à titre indicatif, pour ce genre de problème on peut aussi utiliser les expressions régulières
    En fait, au lieu de venir à chaque problème nous dire "celui-là on peut le resoudre par des regex" tu devrais établir la liste des problèmes qu'on ne peut pas résoudre par des regex. A mon avis ça irait plus vite
    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]

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    Citation Envoyé par Sve@r Voir le message
    En fait, au lieu de venir à chaque problème nous dire "celui-là on peut le resoudre par des regex" tu devrais établir la liste des problèmes qu'on ne peut pas résoudre par des regex. A mon avis ça irait plus vite
    ben si je fais cela j'aurais un volume de réponses moins important
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Ok merci à vous tous, tout ceci va m'être utile

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 15/06/2013, 01h11
  2. un text qui ne s'affiche pas sur une datagrid
    Par Msysteme dans le forum C#
    Réponses: 10
    Dernier message: 10/10/2011, 17h34
  3. ListView dans un TVisualFormView qui ne s'affiche pas
    Par GlobeTrotteuse dans le forum C++
    Réponses: 1
    Dernier message: 25/06/2010, 16h22
  4. [RegEx] recuperer des mots dans un texte qui est un code php
    Par hendrix67 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2010, 16h11
  5. Text qui ne s'affiche pas dans internet explorer
    Par cuisto44000 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 02/03/2010, 15h54

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