On appelle palindrome un mot qui se lit dans les deux sens comme "sos" ou "radar".
Entrée | Un mot (type str). |
---|---|
Sortie | True si l'entrée est un palindrome, False sinon. |
- définition récursive
- une solution
- traceur
- Si le mot est la chaîne vide, c'est un palindrome. Si le mot ne contient qu'une seule lettre, c'est un palindrome.
-
Dans les autres cas,
le mot est un palindrome
si et seulement si
la première et la dernière lettre sont égales et le mot tronqué de ses première et dernière lettres est un palindrome.
def est_palindrome(mot) :
if len(mot) < 2 : return True
else : return (mot[0] == mot[-1]) and est_palindrome(mot[1:-1])
print(est_palindrome('sos'))
print(est_palindrome('raar'))
print(est_palindrome('KarineAllaEnIrak'.lower()))
print(est_palindrome('gloup'))
Décomposons un peu avec des traces :
def trace(f):
decale = 0
def g(mot):
nonlocal decale
if len(mot) < 2 : pass
else :
print('| ' * decale + '|--', f.__name__, '(', mot ,') ', end = '= ' )
print( f.__name__, '(', mot[1:-1] ,') ' )
decale += 1
valeur = f(mot)
print('| ' * decale , f.__name__, '(', mot,') =', repr(valeur) )
decale -= 1
return valeur
return g
def est_palindrome(mot) :
return (len(mot) < 2) or ( (mot[0] == mot[-1]) and est_palindrome(mot[1:-1]) )
est_palindrome = trace(est_palindrome)
est_palindrome('KarineAllaEnIrak'.lower())