1. Créer une liste et accéder à ses éléments
Exercice 1 — ⭐
On définit L = [3, 8, 1, 6, 4].
- Que valent
L[1],L[-2]etlen(L)? - Que se passe-t-il si on demande
L[5]? - On exécute
L[0] = L[4] + 1. Que contientLensuite ?
Voir le corrigé
L[1]vaut8(deuxième élément, l’indice commence à 0),L[-2]vaut6(avant-dernier),len(L)vaut5.- Une erreur
IndexError: les indices vont de0à4. L[4] + 1 = 5, doncLvaut[5, 8, 1, 6, 4].
2. Ajouter et supprimer des éléments
Exercice 2 — ⭐
Donne le contenu de L après chaque ligne, puis ce qu’affiche le programme.
L = [2, 4]
L.append(6)
L.append(L[0] + L[-1])
L.pop(1)
L.remove(8)
print(L)
Voir le corrigé
[2, 4] → [2, 4, 6] → [2, 4, 6, 8] (car L[0] + L[-1] = 2 + 6) → [2, 6, 8] (on retire l’élément d’indice 1,
le 4) → [2, 6]. Le programme affiche [2, 6].
3. Générer une liste
Exercice 3 — ⭐⭐
- Écris en compréhension la liste des multiples de compris entre et .
- Écris en compréhension la liste des cubes des entiers de à .
- Que vaut
[x - 1 for x in [3, 5, 9] if x > 4]?
Voir le corrigé
[7 * k for k in range(1, 8)], qui vaut[7, 14, 21, 28, 35, 42, 49].[k ** 3 for k in range(1, 6)], qui vaut[1, 8, 27, 64, 125].- On garde
5et9(supérieurs à 4) et on leur retire 1 :[4, 8].
Exercice 4 — ⭐⭐
La suite de Fibonacci est définie par , et .
- Calcule à la main , …, .
- Écris une fonction
fibo(n)qui renvoie la liste des premiers termes (pour ). On utiliseraL[-1]etL[-2].
Voir le corrigé
- , , , , .
-
def fibo(n): L = [0, 1] for i in range(n - 2): L.append(L[-1] + L[-2]) return L print(fibo(10)) # affiche [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
4. Parcourir une liste
Exercice 5 — ⭐⭐⭐
Écris les fonctions suivantes sans utiliser sum, max ni count.
compte(L, x): renvoie le nombre de fois oùxapparaît dansL.moyenne(L): renvoie la moyenne des éléments deL.indice_max(L): renvoie l’indice du plus grand élément (le premier, s’il y en a plusieurs).
Voir le corrigé
def compte(L, x):
c = 0
for y in L:
if y == x:
c = c + 1
return c
def moyenne(L):
s = 0
for y in L:
s = s + y
return s / len(L)
def indice_max(L):
im = 0
for i in range(len(L)):
if L[i] > L[im]:
im = i
return im
print(compte([1, 3, 1, 2], 1), moyenne([4, 8, 9]), indice_max([5, 9, 2, 9])) # affiche 2 7.0 1
Pour indice_max, on a besoin de la position : on parcourt donc par les indices.
Exercice 6 — ⭐⭐⭐
Un professeur range les notes d’un contrôle dans une liste : notes = [8, 12, 15, 9, 11, 14].
- Écris en compréhension la liste
admisdes notes supérieures ou égales à . Que vaut-elle ? - Écris une instruction qui calcule la proportion de notes supérieures ou égales à .
Voir le corrigé
admis = [n for n in notes if n >= 10], qui vaut[12, 15, 11, 14].len(admis) / len(notes), qui vaut .
5. Les listes au service des mathématiques
Exercice 7 — ⭐⭐⭐
- Explique ce que renvoie la fonction suivante, puis donne
diviseurs(36).def diviseurs(n): return [d for d in range(1, n + 1) if n % d == 0] - Un nombre est parfait s’il est égal à la somme de ses diviseurs autres que lui-même (exemple : ).
Écris une fonction
est_parfait(n)qui renvoieTrueouFalse, puis une instruction qui donne la liste des nombres parfaits inférieurs à .
Voir le corrigé
- La liste des diviseurs positifs de (les entre et tels que le reste de par est nul).
diviseurs(36)vaut[1, 2, 3, 4, 6, 9, 12, 18, 36]. -
def est_parfait(n): return sum(diviseurs(n)) - n == n print([n for n in range(2, 500) if est_parfait(n)]) # affiche [6, 28, 496]
Exercice 8 — ⭐⭐⭐⭐
On lance deux dés et on note la somme (de à ).
- Écris une fonction
effectifs_sommes(n)qui simule lancers de deux dés et renvoie une liste de effectifs : à l’indice l’effectif de la somme , …, à l’indice celui de la somme . - Quelle fréquence attend-on, pour grand, à l’indice ? Justifie.
Voir le corrigé
-
(from random import randint def effectifs_sommes(n): E = [0] * 11 # liste de 11 zéros for k in range(n): s = randint(1, 6) + randint(1, 6) E[s - 2] = E[s - 2] + 1 return E[0] * 11fabrique une liste de onze zéros ; on pouvait aussi écrire[0 for i in range(11)].) - L’indice correspond à la somme . Sur les couples équiprobables, donnent : . La fréquence doit se rapprocher de (la somme la plus fréquente).