NSI (première) · Chapitre 7 · Application directe du cours
Écrire derniere occurrence(t, v)
Parcourir, trier, prouver · Parcours élémentaires · niveau 1 (application)
Énoncé
Écrire derniere_occurrence(t, v). Quelle postcondition ? Peut-on la déduire d'un simple parcours inversé ?
Corrigé
def derniere_occurrence(t, v):
"""Indice de la DERNIÈRE occurrence de v dans t, ou -1 si absente.
Postcondition : si le résultat r vaut -1, aucun élément de t n'est
égal à v ; sinon t[r] == v et aucun élément d'indice
strictement supérieur à r n'est égal à v.
"""
for i in range(len(t) - 1, -1, -1):
if t[i] == v:
return i
return -1
Oui, et c'est exactement cela. Le range(len(t) - 1, -1, -1) parcourt les indices de à : on rencontre donc la dernière occurrence en premier. Les trois arguments se lisent « de , jusqu'à exclu, par pas de » — la borne est là pour que soit visité.
La postcondition est le miroir exact de celle de recherche : « aucun d'indice inférieur » y devient « aucun d'indice supérieur ». L'invariant se transporte de même : avant le tour , aucun des éléments t[i+1..n-1] n'est égal à v.
Contrôle. Sur [3, 1, 3, 7, 3] en cherchant : derniere_occurrence rend , recherche rend . La postcondition entière a été vérifiée sur tableaux tirés au hasard.
L'autre voie, à écarter. On pourrait parcourir à l'endroit en mémorisant le dernier indice vu, sans jamais sortir tôt. C'est correct, mais cela paie toujours comparaisons, là où le parcours inversé s'arrête dès qu'il a trouvé.
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.