Palindromes

Contexte

Un palindrome est un mot ou une phrase qui se lit indifféremment de droite à gauche et de gauche à droite.

Environnement de travail

Pour cet exercice, vous devez utiliser en priorité le fichier squelette ex05-palindromes.py. IMPORTANT : Enregistrez le avec Right Click + Save Link As... pour conserver l’encodage.

Selon la convention de structuration des modules, ce fichier sera structuré en quatre parties :

  1. Imports et définition des variables globales est vide car on ne fait pas appel à des packages externes, ni à des variables globales ;
  2. Définition des fonctions secondaires contient les différentes fonctions à écrire ;
  3. Définition de la fonction principale contient l’appel aux fonctions secondaires;
  4. Appel protégé de la fonction principale.

Objectifs

L’objectif est d’écrire une fonction pal() :

Les espaces seront ignorés et la fonction devra être insensible à la casse (minuscules/majuscules). Une version plus élaborée pourrait traiter le cas des caractères accentués et de la ponctuation.

Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main() et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).

Informations complémentaires

Il existe plusieurs stratégies pour résoudre le problème.

Algorithme itératif

On peut utiliser un algorithme itératif “bas niveau” en parcourant les caractères de la chaîne simultanément à partir du début et de la fin. Le terme “bas niveau” est employé parce que la solution s’intéresse aux éléments constitutifs de la chaîne de caractère, pas à la chaîne elle même. Cet algorithme fonctionne mais ne tire pas partie des fonctionnalités de Python.

Approche “haut niveau”

Une approche “haut niveau” ou pythonique va a contrario considérer la chaîne de caractère comme l’élément de base. Elle ne nécessite donc pas d’itérations.On utilise exclusivement le slicing et les méthodes de chaines de caractères. Lesquelles ? Cette façon de faire est plus concise (3 lignes max), plus performante et doit être privilégiée.

Algorithme récursif

On peut également utiliser la récursivité. Quels sont les cas de base ? Quel est l’appel récursif ?

Doctests

Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal:

$ python -m doctest ex05_palindromes.py -v

La totalité des doctests doivent réussir.