Titres palindromiques

En étudiant un vieux parchemin, on apprend que le livre qui nous intéresse dans la bibliothèque a un titre qui est un palindrome : il peut se lire de gauche à droite ou de droite à gauche (sans s’occuper des espaces).

Vous devez analyser les titres de tous les livres de la bibliothèque et sélectionner ceux qui sont des palindromes.

Contraintes

Chaque titre de livre est au plus de longueur 100.

Entrée

La première ligne contient un entier nbLivres, le nombre total de livres.

Chacun des nbLivres lignes suivantes contient un titre de livre.

Les titres sont composés d’espaces et de lettres majuscules ou minuscules, non accentuées.

Sortie

Vous devez afficher chaque titre de livre qui est un palindrome.

Pour déterminer si un titre est un palindrome, on ne considérera ni les espaces, ni la casse (majuscule ou minuscule) des lettres.

Exemple

entrée :

3
Lieur a Rueil
Le chevalier delibere
Un roc si biscornu

sortie :

Lieur a Rueil
Un roc si biscornu

Solution

def est_palindrome(titre: str) -> bool:
    """Renvoie un booléen,
    True si 'titre' est un palindrome.
    La casse ne compte pas.

    >>> est_palindrome("Laval")
    True

    >>> est_palindrome("ABc")
    False
    
    """
    ligne = titre.lower() # en minuscule
    début = 0
    fin = len(ligne) - 1
    while début < fin:
        if ligne[début] == ' ':
            début += 1
        elif ligne[fin] == ' ':
            fin -= 1
        else:
            if ligne[début] != ligne[fin]:
                return False
            else:
                début += 1
                fin -= 1
    return True

nb_livres = int(input())
for i_livre in range(nb_livres):
    titre = input()
    if est_palindrome(titre):
        print(titre)

Commentaires

def est_palindrome(ligne: str) -> bool:
    if ligne == "":
        return True
    elif ligne[0] == " ":
        return est_palindrome(ligne[1:])
    elif ligne[-1] == " ":
        return est_palindrome(ligne[:-1])
    elif ligne[0] != ligne[-1]:
        return False
    else:
        return est_palindrome(ligne[1:-1])
for _ in range(int(input())):
    IN = input()
    INI = "".join(IN.lower().split())
    if INI == INI[::-1]:
        print(IN)