mathématiques appliquées (ECG 1re année) · Chapitre 11 · Application directe du cours
Renverser une liste, tester un palindrome
Informatique et algorithmique · Boucles et listes · niveau 1 (application)
Énoncé
Écrire renverse(L) qui renvoie une nouvelle liste contenant les éléments de L dans l'ordre inverse, puis est_palindrome(L) qui teste si L se lit identiquement dans les deux sens.
Corrigé
Le code.
def renverse(L):
R = []
for i in range(len(L) - 1, -1, -1): # de len(L)-1 jusqu'a 0
R.append(L[i])
return R
def est_palindrome(L):
n = len(L)
for i in range(n // 2):
if L[i] != L[n - 1 - i]:
return False # HORS de la boucle serait faux
return True
print(renverse([1, 2, 3])) # [3, 2, 1]
print(est_palindrome([1, 2, 3, 2, 1])) # True
print(est_palindrome([1, 2, 3])) # False
print(est_palindrome([])) # True
Le parcours à l'envers. range(len(L) - 1, -1, -1) engendre les indices : la borne d'arrêt est exclue, c'est ce qui permet d'atteindre l'indice . Écrire range(len(L) - 1, 0, -1) oublierait le premier élément — une erreur silencieuse.
Le test du palindrome. On compare l'élément d'indice à son symétrique d'indice . Il suffit de parcourir la moitié de la liste : au-delà, on refait les mêmes comparaisons dans l'autre sens. Pour impair, l'élément central n'est comparé qu'à lui-même, ce qui est inutile mais sans danger — n // 2 l'exclut d'ailleurs du parcours.
Le return True est hors de la boucle. Placé dedans, il renverrait True dès la première paire concordante, sans examiner les suivantes : la fonction dirait « palindrome » pour , dont seule la première comparaison réussit. C'est l'erreur symétrique de celle du return False mal placé dans la recherche séquentielle.
Le cas de la liste vide. range(0) est vide, la boucle ne s'exécute pas et la fonction rend True : une liste vide est bien un palindrome. La convention est cohérente, mais elle mérite d'être vérifiée plutôt que subie.
Exercices semblables
- Somme et moyenne d'une liste corrigé
- Compter et localiser corrigé
- Une dichotomie et son nombre de tours corrigé
- Une suite récurrente en Python corrigé
- Lire un graphe corrigé