Aller au contenu

Exercices: Les listes

Écris un programme qui crée une liste contenant les 5 premiers multiples de 3 (à partir de 3), puis affiche chaque élément sur une ligne séparée.

3
6
9
12
15
🔑 Voir la solution
multiples = [3, 6, 9, 12, 15]
for nombre in multiples:
print(nombre)

Même exercice, mais sans écrire les valeurs manuellement. Utilise range() et une boucle pour construire la liste.

🔑 Voir la solution
multiples = []
for i in range(1, 6):
multiples.append(i * 3)
print(multiples)

Ou directement :

multiples = list(range(3, 16, 3))
print(multiples)

Ou de manière compacte :

multiples = [i * 3 for i in range (1, 6)]
print(multiples)

Écris un programme qui crée une liste de prénoms, puis affiche le premier et le dernier élément sans connaître la taille de la liste à l’avance.

🔑 Voir la solution
prenoms = ["Alice", "Bob", "Charlie", "Diana", "Eve"]
print("Premier :", prenoms[0])
print("Dernier :", prenoms[-1])

Écris un programme qui vérifie si un prénom saisi par l’utilisateur fait partie d’une liste d’invités.

Liste des invités : Alice, Bob, Charlie, Diana
Entrez un prénom : Bob
Bob est dans la liste !
Liste des invités : Alice, Bob, Charlie, Diana
Entrez un prénom : Eve
Eve n'est pas dans la liste.
🔑 Voir la solution
invites = ["Alice", "Bob", "Charlie", "Diana"]
prenom = input("Entrez un prénom : ")
if prenom in invites:
print(prenom, "est dans la liste !")
else:
print(prenom, "n'est pas dans la liste.")

Avec répetition:

invites = ["Alice", "Bob", "Charlie", "Diana"]
while True:
prenom = input("Entrez un prénom : ")
if prenom in invites:
print(prenom, "est dans la liste !")
elif prenom == "xox":
break
else:
print(prenom, "n'est pas dans la liste.")

Sans utiliser la méthode .count(), écris un programme qui compte combien de fois la valeur 7 apparaît dans la liste suivante :

nombres = [3, 7, 2, 7, 8, 7, 1, 4, 7, 6]
Le nombre 7 apparaît 4 fois.
🔑 Voir la solution
nombres = [3, 7, 2, 7, 8, 7, 1, 4, 7, 6]
compteur = 0
for n in nombres:
if n == 7:
compteur = compteur + 1
print("Le nombre 7 apparaît", compteur, "fois.")

Sans utiliser la fonction max(), écris un programme qui trouve la plus grande valeur dans une liste de nombres.

valeurs = [34, 12, 78, 56, 91, 23, 67]
Le maximum est : 91
💡 Indice

Commence par supposer que le premier élément est le maximum, puis compare avec chaque élément suivant.

🔑 Voir la solution
valeurs = [34, 12, 78, 56, 91, 23, 67]
maximum = valeurs[0]
for valeur in valeurs:
if valeur > maximum:
maximum = valeur
print("Le maximum est :", maximum)

Écris un programme qui sépare une liste de nombres en deux listes : une pour les pairs, une pour les impairs.

nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Pairs : [2, 4, 6, 8, 10]
Impairs : [1, 3, 5, 7, 9]
🔑 Voir la solution
nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pairs = []
impairs = []
for n in nombres:
if n % 2 == 0:
pairs.append(n)
else:
impairs.append(n)
print("Pairs :", pairs)
print("Impairs :", impairs)

Écris un programme qui, à partir d’une liste de nombres, produit une nouvelle liste où chaque élément est la somme de tous les éléments précédents (incluant lui-même).

nombres = [1, 2, 3, 4, 5]
Sommes cumulatives : [1, 3, 6, 10, 15]

Explication : 1, 1+2=3, 1+2+3=6, 1+2+3+4=10, 1+2+3+4+5=15.

🔑 Voir la solution
nombres = [1, 2, 3, 4, 5]
cumulatif = []
somme = 0
for n in nombres:
somme = somme + n
cumulatif.append(somme)
print("Sommes cumulatives :", cumulatif)

Sans utiliser .reverse() ni [::-1], écris un programme qui crée une nouvelle liste contenant les éléments dans l’ordre inverse.

original = [10, 20, 30, 40, 50]
Inversée : [50, 40, 30, 20, 10]
💡 Indice

Parcours la liste originale avec un indice allant de la fin vers le début, ou utilise insert(0, ...) à chaque itération.

🔑 Voir la solution
original = [10, 20, 30, 40, 50]
inversee = []
for i in range(len(original) - 1, -1, -1):
inversee.append(original[i])
print("Inversée :", inversee)

Le range(len(original) - 1, -1, -1) parcourt les indices de 4 à 0 inclusivement.


Écris un programme qui demande les notes d’un groupe d’étudiants (saisie terminée par -1), puis affiche uniquement les notes de 60 et plus, triées en ordre croissant.

Note (-1 pour terminer) : 85
Note (-1 pour terminer) : 42
Note (-1 pour terminer) : 73
Note (-1 pour terminer) : 58
Note (-1 pour terminer) : 91
Note (-1 pour terminer) : -1
Réussites (triées) : [73, 85, 91]
🔑 Voir la solution
notes = []
note = float(input("Note (-1 pour terminer) : "))
while note != -1:
notes.append(note)
note = float(input("Note (-1 pour terminer) : "))
reussites = []
for n in notes:
if n >= 60:
reussites.append(n)
print("Réussites (triées) :", sorted(reussites))

Sans utiliser set(), écris un programme qui crée une nouvelle liste contenant les éléments sans doublons, dans l’ordre d’apparition.

nombres = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
Sans doublons : [3, 1, 4, 5, 9, 2, 6]
💡 Indice

Pour chaque élément, vérifie s’il est déjà dans la nouvelle liste avant de l’ajouter.

🔑 Voir la solution
nombres = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sans_doublons = []
for n in nombres:
if n not in sans_doublons:
sans_doublons.append(n)
print("Sans doublons :", sans_doublons)

Écris un programme qui effectue une rotation à gauche d’une liste : le premier élément va à la fin, tous les autres se décalent d’une position.

lettres = ["A", "B", "C", "D", "E"]
Avant : ['A', 'B', 'C', 'D', 'E']
Après : ['B', 'C', 'D', 'E', 'A']
🔑 Voir la solution
lettres = ["A", "B", "C", "D", "E"]
print("Avant :", lettres)
premier = lettres.pop(0)
lettres.append(premier)
print("Après :", lettres)

Avec le tranchage :

lettres = ["A", "B", "C", "D", "E"]
lettres = lettres[1:] + lettres[:1]
print("Après :", lettres)

Écris un programme qui fusionne deux listes déjà triées en une seule liste triée, sans utiliser sorted() ni .sort().

liste_a = [1, 4, 7, 9, 12]
liste_b = [2, 3, 5, 8, 10, 11]
Fusionnée : [1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12]
💡 Indice

Utilise deux indices i et j qui avancent chacun dans leur liste. À chaque étape, ajoute le plus petit des deux éléments pointés.

🔑 Voir la solution
liste_a = [1, 4, 7, 9, 12]
liste_b = [2, 3, 5, 8, 10, 11]
fusionnee = []
i = 0
j = 0
while i < len(liste_a) and j < len(liste_b):
if liste_a[i] <= liste_b[j]:
fusionnee.append(liste_a[i])
i = i + 1
else:
fusionnee.append(liste_b[j])
j = j + 1
while i < len(liste_a):
fusionnee.append(liste_a[i])
i = i + 1
while j < len(liste_b):
fusionnee.append(liste_b[j])
j = j + 1
print("Fusionnée :", fusionnee)

Deux listes parallèles contiennent les noms des étudiants et leurs notes. Écris un programme qui affiche le bulletin complet et identifie l’étudiant avec la meilleure note.

noms = ["Alice", "Bob", "Charlie", "Diana", "Eve"]
notes = [88, 72, 95, 81, 90]
=== Bulletin ===
Alice : 88
Bob : 72
Charlie : 95
Diana : 81
Eve : 90
Meilleure note : Charlie avec 95
💡 Indice

Trouve l’indice du maximum dans la liste notes, puis utilise cet indice pour retrouver le nom correspondant dans noms.

🔑 Voir la solution
noms = ["Alice", "Bob", "Charlie", "Diana", "Eve"]
notes = [88, 72, 95, 81, 90]
print("=== Bulletin ===")
for i in range(len(noms)):
espaces = " " * (9 - len(noms[i]))
print(format("{}{}: {}", noms[i], espaces, notes[i]))
meilleure = max(notes)
position = notes.index(meilleure)
print()
print("Meilleure note :", noms[position], "avec", meilleure)

Écris un programme qui affiche un histogramme horizontal à partir d’une liste de valeurs, en utilisant le caractère .

donnees = [5, 12, 8, 3, 15, 7]
etiquettes = ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"]
Lun | █████
Mar | ████████████
Mer | ████████
Jeu | ███
Ven | ███████████████
Sam | ███████
🔑 Voir la solution
donnees = [5, 12, 8, 3, 15, 7]
etiquettes = ["Lun", "Mar", "Mer", "Jeu", "Ven", "Sam"]
for i in range(len(donnees)):
barre = "" * donnees[i]
print(etiquettes[i], "|", barre)

Wordle est un jeu de devinette de mots.

  1. Un mot secret de 5 lettres est choisi au hasard.
  2. Le joueur a 6 tentatives pour le deviner.
  3. À chaque tentative, le programme donne un indice pour chaque lettre :
    • La lettre elle-même → bonne position
    • Le caractère → lettre présente mais mauvaise position
    • Le caractère → lettre absente du mot
  4. Les accents sont ignorés (ÉTAPEETAPE).

Le mot secret est MARGE.

========= WORDLE =========
Tentative 1/6
Entre un mot de 5 lettres : gamer
GAMER → ❗[A]❗❗❗
Tentative 2/6
Entre un mot de 5 lettres : table
GAMER → ❗[A]❗❗❗
TABLE → ❌[A]❌❌[E]
Tentative 3/6
Entre un mot de 5 lettres : marge
GAMER → ❗[A]❗❗❗
TABLE → ❌[A]❌❌[E]
MARGE → [M][A][R][G][E]
Bravo ! Trouvé en 3 tentatives !

Détail de l’évaluation de GAMER :

Position01234
SecretMARGE
EssaiGAMER
Résultat!A!!!
  • G est dans MARGE mais pas à la position 0 → !
  • A est à la bonne position → A
  • M est dans MARGE mais pas à la position 2 → !
  • E est dans MARGE mais pas à la position 3 → !
  • R est dans MARGE mais pas à la position 4 → !

retirer_accents(mot)

Remplace les voyelles accentuées par leur version sans accent. Utilise deux listes parallèles (avec/sans accents) et .index().

saisir_mot()

Demande un mot, redemande tant qu’il n’a pas 5 lettres, retourne le mot en majuscules sans accents.

evaluer(secret, essai)

Compare chaque lettre de l’essai au secret. Retourne la chaîne d’indice (M, ! ou x pour chaque position).

jouer_partie() — Fonction principale

Choisit un mot au hasard, gère les 6 tentatives, affiche l’historique et le résultat.

import random
MOTS = [
"MARGE", "TABLE", "LIGNE", "POMME", "ROUTE",
"BRISE", "CRANE", "DOUTE", "FERME", "GLACE",
"HERBE", "JUSTE", "LAMPE", "NUAGE", "OLIVE",
"PERLE", "RONDE", "SABLE", "TIGRE", "VITRE",
"ABIME", "CARGO", "ETAPE", "FORET", "GUIDE"
]