ord, chr et un petit problème de bouclage : écrire un crypteur-décrypteur
Demander à Python de décaler des lettres ne marche pas tout seul : il n'existe pas de fonction intégrée pour cela. Il faut l'inventer. Pour Python, les lettres n'ont pas de sens particulier : ce sont des caractères stockés sous forme de nombres. Notre but est d'écrire une fonction cryptCesar(texte, cle).
Deux fonctions à connaître
ord("A") donne le numéro du caractère A dans la table ASCII (ici 65).
chr(65) fait l'inverse : elle donne le caractère qui a ce numéro (ici "A").
Les lettres majuscules A à Z ont les numéros 65 à 90.
Teste chr(65), chr(66), puis quelques nombres entre 65 et 91. Qu'obtiens-tu ?
Teste ord("A") et ord("B"). Devine ce que donneront ord("F") et ord("Z"), puis vérifie.
À quoi sert la fonction ord ? et la fonction chr ?
Indice
Le numéro d'une lettre augmente de 1 quand on passe à la lettre suivante de l'alphabet.
📝 réponses dans ton compte rendu, exercice 13
EX 14Je découvre🌶️prise en main
Exercice 14 — Le décalage vu par Python
Compare ord d'une lettre de départ et ord de la lettre qu'elle devient avec la clé 3 (tableau du cours C2). Fais quelques exemples, puis généralise.
Complète l'expression qui transforme lettre en lettre chiffrée : chr(ord(lettre) + ...). Vérifie avec "G", "M" et "R".
Indice
Pour A → D : ord("D") - ord("A"). Essaie avec d'autres lettres, le résultat est toujours le même.
📝 réponses dans ton compte rendu, exercice 14
EX 15Je comprends🌶️🌶️application
Exercice 15 — Les cas limites
Que devrait afficher la méthode pour "X", "Y" et "Z" avec la clé 3 ? Est-ce le cas avec chr(ord(lettre) + 3) ? Pourquoi ?
Complète : ord("X") + 3 = .... alors qu'on voulait "A", de code ASCII .... ; même chose pour "Y" et "Z". Quel est l'écart entre les codes dans chaque paire ?
Complète le correctif : if ord(lettre) + 3 > ... : puis nouvelleLettre = chr(ord(lettre) + 3 - ...), sinon nouvelleLettre = chr(ord(lettre) + ...).
Indice
On veut retomber sur A, B, C : il faut « revenir au début de l'alphabet » en retirant 26 (la longueur de l'alphabet).
📝 réponses dans ton compte rendu, exercice 15
EX 16Je comprends🌶️🌶️application
Exercice 16 — Et pour déchiffrer ?
Quand la formule chr(ord(lettre) - 3) pose-t-elle problème ? (pour quelles lettres ?)
Adapte le correctif : if ... : puis nouvelleLettre = chr(ord(lettre) - 3 + 26), sinon nouvelleLettre = ....
Indice
Pense aux lettres du début de l'alphabet : que donne ord("A") - 3 ?
📝 réponses dans ton compte rendu, exercice 16
CoursUne fonction générale
On veut maintenant que la clé puisse être n'importe quel nombre. Si elle est positive, la fonction chiffre ; si elle est négative, elle déchiffre. Par exemple, un texte chiffré avec la clé 5 se déchiffre avec la clé −5.
EX 17Je programme🌶️🌶️🌶️plusieurs étapes
Exercice 17 — La fonction cryptCesar
Enregistre le programme ci-dessous sous NOM_Prenom_ex09.py dans ton éditeur, puis complète les trois endroits marqués ... en t'inspirant des exercices précédents. Les lettres sont en majuscules, sans accent.
cryptcesar.py
defcryptCesar(texte, cle):
"""la clé du codage sera comprise entre -26 et 26"""
textdep = texte.upper()
textfin = ""for lettre in textdep:
if65 <= ord(lettre) <= 90: # on ne crypte que les lettresiford(lettre) + cle > ...: # à compléter
textfin += chr(ord(lettre) + cle - 26)
elif ...: # à compléter
textfin += chr(ord(lettre) + cle + 26)
else:
... # à compléterelse: # la ponctuation est reproduite
textfin += lettre # sans changementreturn textfin
Complète le programme.
Teste-le avec print(cryptCesar("ANTIQUITE", 3)), puis print(cryptCesar("DQWLTXLWH", -3)).
Explique la ligne textdep = texte.upper() et la raison de sa présence.
Indice 1
La condition de la première ligne à compléter correspond au cas « on dépasse Z ».
Indice 2
La deuxième est le cas « on passe avant A ».
Indice 3
Pour la ligne upper(), essaie print(ord("a")) : les minuscules ont d'autres numéros que les majuscules.
💾 NOM_Prenom_ex17.py
Les accents trahissent
Un É a un numéro ASCII étendu qui n'est pas entre 65 et 90 : il est recopié sans changement. Un message chiffré contenant des accents laisserait donc du texte lisible. On écrit donc les messages sans accent.
ExercicesJe m'en sers
EX 18Je programme🌶️🌶️🌶️plusieurs étapes
Exercice 18 — Les 25 clés d'un coup
Avec ta fonction cryptCesar, écris une boucle qui essaie les 25 clés :