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
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
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
Arduino, Raspberry Pi, ESP32, Infineon/Cypress PSoC, FPGA...
Arduino : Le forum, Le manuel de laboratoire, les Quiz, les cahiers pratiques, les sources et outils
- Une première expérience LoRaWAN [Nouveau]
- Des capteurs connectés pour la maison avec Arduino et Raspberry Pi. Et en Zigbee ?
- FPGA : programmation d'un transmetteur UART en SystemVerilog
- Apprendre à développer sur FPGA avec Intel Quartus Prime
- FPGA : programmer un contrôleur pour écran VGA
[Nouveau] Vous voulez soutenir le Club Developpez.com ? Abonnez-vous !
Je préfère une méthode purement "algorithmique".
J'avais plus pensé à quelque chose comme cela :
Mais j'avais obtenu une erreur.
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()
Par exemple dans la console :
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
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'
Si tu n'as pas le droit à split()...
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']
Arduino, Raspberry Pi, ESP32, Infineon/Cypress PSoC, FPGA...
Arduino : Le forum, Le manuel de laboratoire, les Quiz, les cahiers pratiques, les sources et outils
- Une première expérience LoRaWAN [Nouveau]
- Des capteurs connectés pour la maison avec Arduino et Raspberry Pi. Et en Zigbee ?
- FPGA : programmation d'un transmetteur UART en SystemVerilog
- Apprendre à développer sur FPGA avec Intel Quartus Prime
- FPGA : programmer un contrôleur pour écran VGA
[Nouveau] Vous voulez soutenir le Club Developpez.com ? Abonnez-vous !
Oui, je veux faire 'Meli Melo', j'ai donc conçu ce code :
mais j'obtiens l'erreur suivante :
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="")
file "./prog.py", line 3, in <module>
TypeError: Can't convert 'list' object to str implicitly
C'est seulement la première lettre qu'il faut mettre en majuscule.
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'
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:].
Arduino, Raspberry Pi, ESP32, Infineon/Cypress PSoC, FPGA...
Arduino : Le forum, Le manuel de laboratoire, les Quiz, les cahiers pratiques, les sources et outils
- Une première expérience LoRaWAN [Nouveau]
- Des capteurs connectés pour la maison avec Arduino et Raspberry Pi. Et en Zigbee ?
- FPGA : programmation d'un transmetteur UART en SystemVerilog
- Apprendre à développer sur FPGA avec Intel Quartus Prime
- FPGA : programmer un contrôleur pour écran VGA
[Nouveau] Vous voulez soutenir le Club Developpez.com ? Abonnez-vous !
Bonjour,
Ou bien…
Clodion
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 >>>
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"]
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.
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]
Pas besoin de vérifier la condition if len(mot) > 1, le slicing ne retourne pas d'IndexError.
Sinon par curiosité ça donnerait ceci :
Ne retourne rien si la condition len() > 1 est fausse, la valeur sera une str de longueur 0: ''
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]
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.
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()
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.![]()
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...
Bonjour,
Je vous remercie pour vos réponses diverses et très bien détaillées
A bientôt.
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."
Partager