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
- Penser à ajouter une docstring et d'autres tests unitaires.
- Le premier caractère de la chaine
mot
estmot[0]
- Le dernier caractère de la chaine
mot
estmot[-1]
- Pour une copie d'une tranche du second jusqu'à l'avant-dernier caractère d'une chaine
mot
, on peut écriremot[1:-1]
Derniers indices
- Si la chaine fait zéro ou un caractère, c'est un palindrome.
- Sinon on peut comparer le premier et le dernier caractère.
- 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.