Algorithme pour mettre une liste en majuscule (python) [Fermé]

Signaler
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019
-
Bonjour,
Tout d'abord je tiens a remercier ce qui prendrons le temps de me répondre...
Dans un exercice, je dois convertir une liste en majuscule :

La fonction prend en paramètre une liste de chaînes de caractère.
elle renvoie une liste dans laquelle chaque chaine a été mise en majuscule.

Exemple:
--------
>>> tout_en_majuscule(['toto', 'titou', 'tita'])
['TOTO', 'TITOU', 'TITA']

J'ai déjà essayer d'utiliser "upper()" mais le problème c'est qu'il peut mettre en majuscule une seul liste
Pourriez-vous m'aidez s'il vous plait, je n'ai plus d'idée..
merci à vous !

11 réponses

Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
Bonjour,

Si ta fonction reçoit en argument un tableau de n occurrences, il te faut faire une boucle n fois pour traiter un par un chaque élément.

Tu devrais donner ton code ici.

Cdlt
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

Bonjour jee pee,
Mon code est le suivant (avec upper):

def tout_en_majuscules(liste):
      liste = liste.upper()
      print(liste)


Le problème est que je n'arrive pas a "multiplier" l'action du 'upper' pour une liste
Auriez une idée ? En utilisant ou non le upper.
Cdlt
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835 >
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

je ne fais pas de python, mais cet exemple devrait te donner une piste : https://www.science-emergence.com/Articles/Comment-avoir-une-liste-ou-une-matrice-comme-argument-dune-fonction-sous-python/

l = ['coucou','hello','salut']
def fonction(l):
     for i in l:
             print i
fonction(l)


 coucou
hello
salut
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

D'accord merci jee pee,
Je vais essayer d'y arriver comme un grand
Je vous recontacterai si besoin
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
il faut que tu fasses vite, moi je viens trouver la solution ;-)
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

Mince ça fait depuis ce matin 9h que j'y suis, car c'est exercice fait partie d'un Dm...
Je comptais justement prendre une pause ^^
Mais au pire donne les premières lignes du code et j'essaierai de compléter
Merci de ton implication pour m'aider en tout cas.
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
J'ai une solution en 7 lignes et tu en as déjà 5 dans l'exemple plus haut ;-)
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

liste= ['coucou','hello','salut']
def majuscules(liste):
     for i in l :
           liste = liste.upper()      
     print(liste)


Je ne vois que ça...
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
Non ce sur quoi tu n'as pas percuté, c'est que la boucle for traite chacune des 3 occurrences à son tour, pas la liste en globalité.

Déjà regarde
liste= ['coucou','hello','salut']
def majuscules(l):
 for i in l :
    print(i.upper()) 
majuscules(liste)


je teste sur https://www.jdoodle.com/python3-programming-online/
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

Le problème de ton code c'est qu'il répète la liste passe en paramètre jusqu'à ce que i arrive à liste
Pour y remédier je propose :

def majuscules(liste):
       for i in l:
              liste = i.upper()
        print(liste)


Si passe : (["hello","world"]), la fonction revoir juste: "WORLD" et non "HELLO WORLD"
As-tu une solution pour y remédier ?
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
ton code ne peut pas fonctionner tu n'as pas défini L, il ne faut pas confondre liste avant l'appel et liste après l'appel à la fonction.

Tu devrais utiliser 2 noms différents (dans l'exemple au départ c'est le cas l et liste)

ou alors une formulation

def majuscules(liste):
 for i in liste :
    print(i.upper()) 
majuscules(['coucou','hello','salut'])
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

Si on passe * ( dans la console)
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

J'ai bien compris mon erreur, mais je ne vois pas en quoi sert la dernière ligne du code :
majuscules(["coucou","hello", ...])
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
A appeler la fonction majuscule definie au début du code et lui passer les paramètres

def ne fait que la définir, elle se s'execute pas à ce moment là
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

Ah oui c'est vrai, merci.
Ducoup le code final est celui que vous m'avez envoyé en dernier ?
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
non là c'était le code pour te faire comprendre la boucle. Avec celui ci tu vas afficher
COUCOU
HELLO
SALUT
pas ce qui est demandé ['COUCOU','HELLO','SALUT']

Pour faire cela il faut constituer un tableau de sortie en agrégeant les mots passés en majuscule.

def fonction(liste):
    listemaj = []
    for i in liste:
        listemaj.append(i.upper())
    print(listemaj)
fonction(['coucou','hello','salut','hi'])


Mais il faut que tu cherches à bien comprendre l'articulation du code

Comme cela n’agaçait de devoir utiliser un tableau supplémentaire, j'ai cherché comment modifier le tableau d'origine, dans le code plus haut i contient le texte du champ, dans celui là on utilise l'indice du tableau

def fonction(liste):
    for i in range(len(liste)):
        liste[i] = liste[i].upper()
    print(liste)        
fonction(['coucou','hello','salut','hi'])


C'est plus simple et plus beau ;-)
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

Merci énormément à toi pour le temps que tu as consacré à ma question je t'en suis reconnaissant car ton code marche a merveille...
J'ai cependant une autre question dans l'exercice qui est de mettre la première lettre de la liste en majuscules
Pourrais-tu une seconde m'aider s'il te plaît car je n'ai vraiment aucune idée...
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
Alors liste est un tableau de mots
i est un mot qui contient un tableau de caractères, il faut que tu travailles cette partie du cours

il faut donc passer juste le 1 caractère en majuscule i[0] et concatener le reste i[1:]

def fonction(liste):
    listemaj = []
    for i in liste:
       listemaj.append(i[0].upper()+i[1:])
    print(listemaj)
fonction(['coucou','hello','salut','hi'])


il y a peut être mieux, mais je viens juste de le découvrir.
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

Super ! Merci beaucoup
Tu pourrais juste m'expliquer à quoi sert le
+i[1:] dans :
listemaj.append(i[0].upper()+i[1:])
Messages postés
29796
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
16 octobre 2020
6 835
i[0] c'est le 1er caractère du mot, ce n'est pas une position1, mais c'est un déplacement depuis le début, par exemple h de hello, i[1:] ce sont les caractères à partir de second jusqu'à la fin du mot : ello

donc on concatene H+ello
Messages postés
48
Date d'inscription
mercredi 16 octobre 2019
Statut
Membre
Dernière intervention
22 octobre 2019

D'accord, j'arrivais à comprendre que 0 était l'indice et que 1 aussi mais je ne comprenais pas le ":", mais je désormais compris.
Je te remercie énormément de m'avoir aidé, j'ai réussi à mieux comprendre certaines choses !