Adloun

Renverser une liste, tester un palindrome

Exercice supplémentaire · niveau 1 (application) · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Boucles et listes

É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.

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.