Aller au contenu

Test de palindrome⚓︎

Palindrome
Un mot est un palindrome s'il se lit de la même façon de droite à gauche comme de gauche à droite.

Exercice

Écrire une fonction récursive telle que est_palindrome(mot) renvoie un booléen qui détermine si la chaine mot est un palindrome.

Indices

  1. Penser à ajouter une docstring et d'autres tests unitaires.
  2. Le premier caractère de la chaine mot est mot[0]
  3. Le dernier caractère de la chaine mot est mot[-1]
  4. Pour une copie d'une tranche du second jusqu'à l'avant-dernier caractère d'une chaine mot, on peut écrire mot[1:-1]
Derniers indices
  1. Si la chaine fait zéro ou un caractère, c'est un palindrome.
  2. Sinon on peut comparer le premier et le dernier caractère.
  3. Enfin, un appel récursif permet de répondre sur le reste de la chaine.
###

def estpy-undpalindrome(mot):bksl-nl ...bksl-nl bksl-nl bksl-nlassert estpy-undpalindrome('mot') == Falsebksl-nlassert estpy-undpalindrome('tot') == Truebksl-nlassert estpy-undpalindrome('esse') == Truebksl-nlbksl-nl

Réponse
🐍 Script Python
def est_palindrome(mot):
    """Détermine si mot est un palindrome"""

    if len(mot) < 2:
        return True
    else:
        if mot[0] != mot[-1]:
            return False
        else:
            return est_palindrome(mot[1:-1])


assert est_palindrome('') == True, "Mot vide"
assert est_palindrome('m') == True, "Mot d'une lettre"
assert est_palindrome('mm') == True, "Deux lettres identiques"
assert est_palindrome('mo') == False, "Deux lettres distinctes"
assert est_palindrome('mot') == False, "Trois lettres"
assert est_palindrome('tot') == True, "Trois lettres"
assert est_palindrome('esse') == True, "Quatre lettres OK"
assert est_palindrome('test') == False
assert est_palindrome('esst') == False
assert est_palindrome('esses') == False
assert est_palindrome('kayak') == True

Il est bon d'ajouter de nombreux tests de natures très différentes.

⚠ Cette solution à base de copie de tranches n'est pas efficace, nous verrons ensuite une méthode plus efficace avec les indices.