Le tableau des effectifs
Exercice de TD · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 6 — Listes et simulations aléatoires · Manipuler une liste
Énoncé
On dispose d'une liste de résultats de lancers de dé, par exemple L = [3, 6, 1, 4, 4, 2, 6, 5, 1, 3, 4, 2].
- Écrire une fonction
effectifs(L)qui renvoie une liste de six nombres : le nombre de , de , …, de . - Vérifier que la somme des effectifs vaut
len(L). - En déduire une fonction
frequences(L).
Corrigé
1.
def effectifs(L):
e = [0, 0, 0, 0, 0, 0] # six compteurs, un par face
for x in L:
e[x - 1] = e[x - 1] + 1 # la face x est comptée à l'indice x-1
return e
L = [3, 6, 1, 4, 4, 2, 6, 5, 1, 3, 4, 2]
print(effectifs(L)) # [2, 2, 2, 3, 1, 2]
Le décalage x - 1 est le cœur de l'exercice. Les faces vont de à , les indices de à : la face se compte à l'indice . Écrire e[x] provoquerait une IndexError dès qu'un apparaît.
2.
print(sum(effectifs(L)), len(L)) # 12 12
L'égalité est une vérification utile : chaque lancer est compté une fois et une seule. Si les deux nombres diffèrent, c'est qu'un cas a été oublié ou compté deux fois.
3.
def frequences(L):
return [e / len(L) for e in effectifs(L)]
ou, sans écriture condensée :
def frequences(L):
f = []
for e in effectifs(L):
f.append(e / len(L))
return f
L'intérêt du tableau d'effectifs est qu'il ne parcourt les données qu'une seule fois pour répondre à six questions à la fois, là où six appels à count parcourraient la liste six fois.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.