Compter et localiser
Exercice supplémentaire · niveau 1 (application) · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Boucles et listes
Énoncé
Écrire compte_pairs(L) qui renvoie le nombre d'éléments pairs d'une liste d'entiers, puis positions(L, x) qui renvoie la liste de tous les indices où x apparaît.
Corrigé
Le code.
def compte_pairs(L):
c = 0
for x in L:
if x % 2 == 0:
c = c + 1
return c
def positions(L, x):
P = []
for i in range(len(L)): # on parcourt les INDICES, pas les valeurs
if L[i] == x:
P.append(i)
return P
print(compte_pairs([3, 8, 4, 7, 10])) # 3
print(positions([5, 2, 5, 9, 5], 5)) # [0, 2, 4]
print(positions([5, 2, 5, 9, 5], 7)) # []
Le test de parité. x % 2 est le reste de la division euclidienne de x par : il vaut si et seulement si x est pair. Le test fonctionne aussi pour les entiers négatifs en Python, où -4 % 2 vaut .
Pourquoi parcourir les indices dans la seconde fonction. La boucle for x in L donne les valeurs, et l'on ne saurait pas où elles se trouvent. Comme on cherche des positions, il faut parcourir range(len(L)) et accéder à L[i].
Le cas où x est absent. La liste P reste vide et la fonction rend []. C'est le comportement souhaitable : rendre None ou obligerait l'appelant à distinguer deux types de réponses, alors qu'une liste vide se traite comme n'importe quelle autre — par exemple avec len(positions(L, x)), qui compte les occurrences.
Le coût. Chaque fonction fait un seul parcours, soit de l'ordre de opérations.
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.