NSI (première) · Chapitre 4 · Application directe du cours
Écrire compte(t, v) qui renvoie le nombre d'occurrences de v dans t…
Les types construits · P-uplets, déballage et compréhensions · niveau 1 (application)
Énoncé
Écrire compte(t, v) qui renvoie le nombre d'occurrences de v dans t, sans utiliser t.count.
Corrigé
def compte(t, v):
"""Nombre d'occurrences de v dans t.
Postcondition : 0 <= resultat <= len(t).
"""
n = 0
for x in t:
if x == v:
n = n + 1
return n
Parcours par élément : la position ne sert à rien, seule la valeur compte. L'accumulateur part de , valeur juste sur le tableau vide.
Vérification.
assert compte([1, 2, 1, 1], 1) == 3
assert compte([], 1) == 0
assert compte([1, 2], 3) == 0
for _ in range(1000):
t = [random.randint(0, 3) for _ in range(random.randint(0, 10))]
v = random.randint(0, 3)
assert compte(t, v) == t.count(v)
Les cas concordent avec t.count.
La variante par compréhension est également correcte :
def compte(t, v):
return len([x for x in t if x == v])
Elle construit cependant un tableau intermédiaire dont on ne garde que la longueur — on paie de la mémoire pour un simple comptage. Sur un million d'éléments, la différence est très concrète.
Un contrôle qui vaut la peine : la somme des effectifs de toutes les valeurs distinctes doit valoir len(t). C'est la postcondition de la fonction occurrences du chapitre 5, qui n'est rien d'autre que cette fonction faite en une passe pour toutes les valeurs à la fois.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.