Aller au contenu

Noircir un texte⚓︎

Avant de rendre public des dossiers sensibles, il arrive que certains organismes les « anonyment » en entier ou partiellement.

Dans le cadre de cet exercice, nous ne programmons qu'une version simpliste : « noircir » un texte consiste à remplacer toutes les caractères alphabétiques par un caractère occultant, comme par exemple .

Le texte L'espion était J. Bond devient alors ▮'▮▮▮▮▮▮ ▮▮▮▮▮ ▮. ▮▮▮▮.

On demande d'écrire la fonction noircir qui prend en argument une chaîne de caractères texte ainsi que le caractère occultant noir et renvoie le même texte « noirci » du début à la fin.

Astuce

Si s est une chaîne de caractères, l'instruction s.isalpha() renvoie True si s n'est composée que de caractères alphabétiques.

Ainsi "é".isalpha() est évalué à True, "Bonjour !".isalpha() est évalué à False.

Exemples

🐍 Console Python
>>> noircir("", "*")
''
>>> noircir("L'espion était J. Bond", "▮")
"▮'▮▮▮▮▮▮ ▮▮▮▮▮ ▮. ▮▮▮▮"
>>> noircir("L'espion était J. Bond", "_")
"_'______ _____ _. ____"
>>> noircir(";-)", "▮")
';-)'
###
from random import randint, choice, samplebksl-nlbksl-nl# Testsbksl-nlassert noircir("", "py-str") == ""bksl-nlassert noircir("L'espion était J. Bond", "▮") == "▮'▮▮▮▮▮▮ ▮▮▮▮▮ ▮. ▮▮▮▮"bksl-nlassert noircir("L'espion était J. Bond", "py-und") == "py-und'py-undpy-undpy-undpy-undpy-undpy-und py-undpy-undpy-undpy-undpy-und py-und. py-undpy-undpy-undpy-und"bksl-nlassert noircir(";-)", "▮") == ";-)"bksl-nlbksl-nlbksl-nl# Tests supplémentairesbksl-nlALPHABET = "".join(chr(i) for i in range(ord("A"), ord("A") + 26))bksl-nlALPHABET += "".join(chr(i) for i in range(ord("a"), ord("a") + 26))bksl-nlPONCTUATION = " ,;:!?.()[]'"bksl-nlNOIRS = "▮#@py-str/%$&"bksl-nlbksl-nlfor py-und in range(10):bksl-nl nbpy-undlettres = randint(1, 20)bksl-nl nbpy-undponctuation = randint(1, 20)bksl-nl texte = "".join([choice(ALPHABET) for py-und in range(nbpy-undlettres)])bksl-nl texte += "".join([choice(PONCTUATION) for py-und in range(nbpy-undponctuation)])bksl-nl texte = "".join(sample(texte, len(texte)))bksl-nl noir = choice(NOIRS)bksl-nl attendu = "".join([noir if c.isalpha() else c for c in texte])bksl-nl assert noircir(texte, noir) == attendu, f"Erreur avec {texte}"bksl-nlbksl-nl 5/5

def noircir(texte, noir):bksl-nl ...bksl-nlbksl-nlbksl-nl# Testsbksl-nlassert noircir("", "py-str") == ""bksl-nlassert noircir("L'espion était J. Bond", "▮") == "▮'▮▮▮▮▮▮ ▮▮▮▮▮ ▮. ▮▮▮▮"bksl-nlassert noircir("L'espion était J. Bond", "py-und") == "py-und'py-undpy-undpy-undpy-undpy-undpy-und py-undpy-undpy-undpy-undpy-und py-und. py-undpy-undpy-undpy-und"bksl-nlassert noircir(";-)", "▮") == ";-)"bksl-nlassert noircir("py-str", "py-str") == "py-str"bksl-nlbksl-nldef noircir(texte, noir):bksl-nl resultat = ""bksl-nl for caractere in texte:bksl-nl if caractere.isalpha():bksl-nl resultat += noirbksl-nl else:bksl-nl resultat += caracterebksl-nlbksl-nl return resultatbksl-nlbksl-nlbksl-nl# Testsbksl-nlassert noircir("", "py-str") == ""bksl-nlassert noircir("L'espion était J. Bond", "▮") == "▮'▮▮▮▮▮▮ ▮▮▮▮▮ ▮. ▮▮▮▮"bksl-nlassert noircir("L'espion était J. Bond", "py-und") == "py-und'py-undpy-undpy-undpy-undpy-undpy-und py-undpy-undpy-undpy-undpy-und py-und. py-undpy-undpy-undpy-und"bksl-nlassert noircir(";-)", "▮") == ";-)"bksl-nlbksl-nl

A

La fonction noircir effectue les calculs sur tous les caractères de texte, on n'utilise pas leurs indices dans la chaîne. On peut donc directement parcourir les caractères de la chaîne avec la boucle for caractere in texte.

Il est aussi possible d'écrire cette fonction en utilisant une approche plus « fonctionnelle » :

🐍 Script Python
def noircir(texte, noir):
    return "".join([noir if c.isalpha() else c for c in texte])

Z