Un projet avec des tests
Vous aller coder ici une méthode de chiffrement/déchiffrement de texte : le code de césar.
Le projet
Du point de vue de python un projet est un dossier qui va contenir les différents fichiers python. Appelons le chiffre_cesar.
À retenir
Dans la mesure du possible, le nom des dossiers et des fichiers d'un projet informatiques :
- ne doivent contenir que des lettres non accentuées
- ne doivent contenir pas contenir d'espaces. On sépare les mots par des underscore
_
Le programme principal
Le programme principal est le fichier que l'on va exécuter, on a coutume de l'appeler main.py
À retenir
Un projet informatique va contenir de nombreux fichiers, mais un seul sera le programme principal, celui que l'on exécutera avec la commande python main.py.
Dans notre cas, notre programme est :
fichier main.py :
import texte
from chiffre import césar_chiffre, césar_déchiffre
entrée = input("Tapez une chaîne de caractères en français : ")
texte = texte.conversion(entrée)
clé = input("Tapez une lettre de l'alphabet (clé de chiffrement) : ")
chiffre = césar_chiffre(texte, clé)
déchiffre = césar_déchiffre(chiffre, clé)
print("Texte initial :", texte)
print("Texte chiffré :", chiffre)
print("Texte déchiffré :", déchiffre)
On voit que ce fichier demande des choses à un utilisateur et utilise deux importations (texte et chiffre) qui correspondent à nos fichiers de fonctions.
Pour exécuter le fichier, on utilise le terminal dans le dossier du projet. Ci-après une exécution possible :
$> python main.py
Tapez une chaîne de caractères en français : Éléonore m'adore !
Tapez une lettre de l'alphabet (clé de chiffrement) : F
Texte initial : ELEONORE M'ADORE !
Texte chiffré : JQJTSTWJ R'FITWJ !
Texte déchiffré : ELEONORE M'ADORE !
Fichiers de fonctions
Là c'est à vous de travailler. On va séparer les fonctions du projet en 2 fichiers :
- un ficher consacré à la mise en forme d'une chaine de caractères
- un ficher consacré au chiffrement/déchiffrement d'un texte écrit en majuscule non accentuées
Prenez l'habitude de tester intensivement vos fonctions avec le terminal. C'est facile à faire en utilisant des raccourci clavier :
- ouvrez un terminal dans vscode avec son raccourci clavier (il est visible dans le menu affichage > terminal ou via le les préférences raccourci en tapant "afficher terminal".).
- exécutez la commande
python -m pytest. Une fois que vous l'aurez exécuté si vous tapez la flèche du haut dans un terminal vous allez reprendre la dernière commande tapée - fermer le terminal pour revenir à votre fenètre de code en utilisant le même raccourci qu'en 1.
La manipulation précédente va très vite !
- le raccourci clavier pour afficher le terminal
- la flèche du haut dans le terminal
- le raccourci clavier pour afficher le terminal
Fonctions chiffre
Créez un fichier chiffre.py et son pendant test_chiffre.py qui chiffre et déchiffre un texte écrit en majuscule non accentuée. Il doit contenir 2 fonctions :
césar_chiffre(texte_clair, cle)avec :texte_clairune chaine de caractère en majusculecléun caractère en majuscule- la fonction doit retourner le chiffre de César de
texteselon laclé
césar_déchiffre(texte_chiffré, cle)avec :texte_chiffréune chaine de caractère en majusculecléun caractère en majuscule- la fonction doit retourner le déchiffrement de César de
texteselon laclé
Vous pourrez utiliser judicieusement (rappelez vous des différentes méthodes des chaines de caractère) la chaine ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" dans vos fonctions
Fonctions texte
Le fichier texte.py ne va contenir qu'une seule fonction, qui va transformer toute chaîne de caractère en une chaîne en majuscule non accentuée. Par exemple :
import unicodedata
def conversion(texte_avec_accent):
liste_glyphes_unicode = list(unicodedata.normalize("NFKD", texte_avec_accent))
liste_caractères = []
for c in liste_glyphes_unicode:
if not unicodedata.combining(c):
liste_caractères.append(c)
chaîne_sans_accent = "".join(liste_caractères)
texte_en_majuscule = chaîne_sans_accent.upper()
return texte_en_majuscule
Créez un fichier texte.py contenant la fonction ci-dessus. Créez le fichier test_conversion.py testant que cette fonction fait bien ce qu'elle est sensée faire.
À retenir
Sachez refaire la fonction de conversion. Elle est parfois très utile.
Ce que l'on teste est dépendant de chaque développeur : si les tests passent il doit être convaincu que son code est fonctionnel.
À retenir
C'est au développeur des fonctions de créer des tests pour elles de tel sorte que s'ils passent il soit persuadé que son code est sans bug (si un bug est découvert plus tard, il suffit de rajouter un test qui le montre puis corriger le code).
Corrigé
Les différents fichiers sont disponible ici