TP: Créer un moteur de censure de texte (1/4)
Imaginez que vous développez un outil qui doit censurer certains mots dans un texte (par
exemple des insultes ou des termes interdits). Quand l’outil détecte un mot interdit, il
doit le remplacer par des *.
Dans ce TP, vous allez progressivement construire un mini-moteur de censure, étape par étape.
Rappel: les chaînes de caractères en Python¶
Une chaîne de caractères (ou string) est une suite de symboles entourés de guillemets:
s = "Bonjour"On peut accéder à chaque caractère individuellement à partir de son indice (index). Le premier caractère est d’indice 0:
s[0]'B'Le second caractère est d’indice 1, et ainsi de suite:
s[1]'o'La fonction len(s) renvoie la longueur de la chaîne:
len("Salut") # 55On peut parcourir une chaîne caractère par caractère avec une boucle for:
for car in "chat":
print(car)c
h
a
t
On peut aussi parcourir une chaîne en utilisant ses indices:
mot = "chat"
for i in range(len(mot)):
print("Indice", i, "→", mot[i])Indice 0 → c
Indice 1 → h
Indice 2 → a
Indice 3 → t
Pour construire une nouvelle chaîne, on utilise souvent un accumulateur. Voilà un exemple où l’on remplace les espaces d’une chaîne de caractères par des tirets:
texte = "le chat dort"
résultat = ""
for car in texte:
if car == " ": # Si c’est un espace
résultat = résultat + "-" # On ajoute un tiret
else:
résultat = résultat + car # Sinon, on garde la lettre
résultat'le-chat-dort'Partie 1: Fonctions de base sur les caractères¶
Avant de pouvoir censurer un mot, nous allons créer des fonctions utilitaires qui serviront ensuite.
Exercice 1: Tester si un caractère est alphabétique¶
Complétez la fonction est_alphabétique ci-dessous pour qu’elle renvoie True si un
caractère est une lettre (A–Z ou a–z) et False sinon.
Indication
Vous pouvez utiliser des comparaisons comme: a <= car <= z.
def est_alphabétique(car):
"""
Teste si le caractère car est alphabétique.
Paramètre car: un caractère (string de longueur 1)
Renvoie: True si car ∈ [A-Z], [a-z], False sinon.
"""
### BEGIN SOLUTION
return ("a" <= car <= "z") or ("A" <= car <= "Z")
### END SOLUTIONassert est_alphabétique("A")
assert est_alphabétique("z")
assert not est_alphabétique("5")
assert not est_alphabétique(".")
assert not est_alphabétique(" ")Exercice 2: Mettre un caractère en minuscule¶
L’objectif de ce deuxième exercice est de transformer un caractère en lettre minuscule:
si car est une majuscule, renvoyer la même lettre en minuscule, sinon, renvoyer car
sans modification.
Complétez la fonction en_minuscule.
def en_minuscule(car):
"""
Renvoie la version minuscule d'un caractère si c'est une majuscule.
Paramètre car: un caractère
Renvoie: car en minuscule
"""
### BEGIN SOLUTION
if "A" <= car <= "Z":
return chr(ord(car) + 32)
return car
### END SOLUTIONassert en_minuscule("A") == "a"
assert en_minuscule("Z") == "z"
assert en_minuscule("a") == "a"
assert en_minuscule("!") == "!"Bilan de la partie 1¶
Vous savez maintenant:
parcourir une chaîne;
reconnaître les caractères alphabétiques;
convertir un caractère majuscule en minuscule grâce à ord() et chr().
Dans la Partie 2, vous allez écrire une fonction qui vérifie si un mot apparaît à un endroit précis dans un texte.