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 :

Liste et majuscule


Sujet :

Python

  1. #1
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut Liste et majuscule
    Bonjour,

    J'aimerais que dans une liste d'éléments, la première lettre de chaque mot soit en majuscule. Par exemple pour la liste suivante : liste = ["PEDro poula","moli melo"] on obtiendrait liste = ["Pedro Poula","Meli Melo"].

    Merci par avance

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 206
    Billets dans le blog
    48
    Par défaut
    Bonsoir,

    Avec capwords :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    s="meli melo"
    from string import capwords
    print (capwords(s))
     
    Meli Melo

  3. #3
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut
    Je préfère une méthode purement "algorithmique".
    J'avais plus pensé à quelque chose comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste = ["PEDro poula","moli melo"]
    for i in range(len(liste)-1):
    	if liste[i][0]:
    		liste[i][0] = liste[i][0].upper()
    Mais j'avais obtenu une erreur.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 206
    Billets dans le blog
    48
    Par défaut
    Par exemple dans la console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    In [1]: s="meli"
     
    In [2]: s[0].upper()
    Out[2]: 'M'
     
    In [3]: s[1:]
    Out[3]: 'eli'
     
    In [4]: s[0].upper()+s[1:]
    Out[4]: 'Meli'
    Mais si tu as "meli melo" et qu'il faut "Meli Melo", il faut commencer par séparer les deux mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    In [5]: s="meli melo"
     
    In [6]: s.split()
    Out[6]: ['meli', 'melo']
    Si tu n'as pas le droit à split()...

  5. #5
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut
    Oui, je veux faire 'Meli Melo', j'ai donc conçu ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    liste = ["meli","melo"]
    for i in range(len(liste)-1):
    	print(liste[i].upper()+liste[1:], end="")
    mais j'obtiens l'erreur suivante :

    file "./prog.py", line 3, in <module>
    TypeError: Can't convert 'list' object to str implicitly

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 206
    Billets dans le blog
    48
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    liste = ["meli","melo"]
     
    liste[0]
    'meli'
     
    liste[1]
    'melo'
     
    liste[0].upper()
    'MELI'
     
    liste[0][0].upper()
    'M'
    C'est seulement la première lettre qu'il faut mettre en majuscule.

    Le message d'erreur vient de liste[1:], il faut d'abord récupérer liste[i] avant d'extraire la sous-chaîne : liste[i][1:].

  7. #7
    Membre émérite
    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
    Par défaut
    Bonjour,
    Ou bien…
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> lst = ["meli","melo"]
    >>> for i in lst:
    	print(i[0].upper()+i[1:], end=" ")
     
     
    Meli Melo 
    >>>
    Clodion

  8. #8
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    MAJ: Hors sujet, j'avais mal lu. Je croyais qu'il fallait conserver les autres lettres en majuscules.


    Voici une version qui tient sur une ligne :

    Pour tester tous les cas :
    liste = ["PEDro poula","moli melo", "c", "", "3"]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [' '.join([mot[0:1].upper() + mot[1:] for mot in mots.split(" ")]) for mots in liste]
    On extrait chaque élément / mots, puis on sépare/split en fonction de l'espace chaque mot on les mets en majuscule et on joint le tout avec un espace.

    Pas besoin de vérifier la condition if len(mot) > 1, le slicing ne retourne pas d'IndexError.

    Sinon par curiosité ça donnerait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [' '.join([mot[0].upper() + mot[1:] for mot in mots.split(" ") if len(mot) > 1]) or mots.upper() for mots in liste]
    Ne retourne rien si la condition len() > 1 est fausse, la valeur sera une str de longueur 0: ''
    or mots remplace la chaîne vide par sa valeur mots.upper().

    Mais ça devient un peu lourd à lire.

    Je viens de relire, il ne faut pas de fonction split? On peut toujours utiliser index sinon.

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    juste pour info, en Python le type chaine propose une méthode capitalize() qui permet justement de retourner une version de la chaine avec le premier caractère en majuscule et les autres en minuscule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    une_chaine = "tOto"
    une_chaine.capitalize()  # affiche 'Toto'
     
    # c'est un poil plus propre que
    une_chaine[:1].upper() + une chaine[1:].lower()

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Humm j'avais cru comprendre qu'il voulait conserver les majuscules et simplement appliquer des capitales sur les mots sans modifier le reste.

    On s'est effectivement pris la tête pour rien, ça m'apprendra à lire trop vite le sujet.

  11. #11
    Membre émérite
    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
    Par défaut
    Citation Envoyé par Tryph Voir le message
    # c'est un poil plus propre que
    Bonjour,
    Oui mais… Nooby300, post 3, préfère une solution purement "algorithmique"… ;-)

    Clodion

  12. #12
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Si on veut faire de l'algorithmie, il faut :


    • Prévoir tous les cas de figures (il y en a un bon paquet)
    • Éviter les fonctions du genre upper comme dans le post n°3
    • Prévoir l'éventualité d'un code lent
    • Faire du C en gros


    Python s'y prête bien, à condition de faire l'exercice sur papier pour ne rien oublier... Utiliser les bytearray semblent être la solution la plus propre pour cet exercice.

    Bonne continuation...

  13. #13
    Membre averti
    Femme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut
    Bonjour,

    Je vous remercie pour vos réponses diverses et très bien détaillées

    A bientôt.

  14. #14
    Membre éclairé
    Avatar de mohamedAziz
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2014
    Messages : 42
    Billets dans le blog
    2
    Par défaut
    salut,
    peut être une méthode plus élégante

    [mohamed@archlaptop ~]$ bpython2
    bpython version 0.14.1 on top of Python 2.7.10 /usr/bin/python2
    >>> liste = ["PEDro poula","moli melo"]
    >>> [x.title() for x in liste]
    ['Pedro Poula', 'Moli Melo']
    >>>




    "Simple is better than complex."

Discussions similaires

  1. [XL-2007] Renomer liste d'un répertoire en majuscule ou minuscule
    Par eliot.raymond dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 23/12/2013, 13h25
  2. Réponses: 4
    Dernier message: 23/03/2009, 13h50
  3. liste de resultats en majuscule
    Par Invité dans le forum IHM
    Réponses: 4
    Dernier message: 06/07/2008, 01h32
  4. Liste Deroulante - Saisie Majuscules
    Par benejepo dans le forum Access
    Réponses: 2
    Dernier message: 05/03/2007, 10h27

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