Le code Morse représente une méthode de codification des messages au moyen de points, de traits et d’espaces. Sa discrétion en fait un outil privilégié pour la transmission de messages confidentiels.
L’utilisation du code Morse est souvent illustrée dans les films, notamment dans les scènes maritimes pour l’échange de communications. C’est ce même code Morse que nous allons explorer ici, à la différence que nous allons concevoir un programme en Python capable de traduire du texte anglais vers le code Morse, et inversement.
Le code Morse
Le code Morse attribue des séquences distinctes à chaque lettre de l’alphabet anglais, aux chiffres, à la ponctuation ainsi qu’à certains caractères non latins. Une fois que vous maîtrisez ces correspondances, l’encodage et le décodage deviennent aisés. La page Wikipédia dédiée au code Morse peut vous fournir des informations et des exemples détaillés.
Dans ce guide, nous allons apprendre à transformer un texte brut en anglais en code Morse, et vice versa. Notre approche se concentrera sur l’alphabet anglais, les chiffres et la ponctuation. Si vous souhaitez élargir la gamme de caractères pris en charge, vous pourrez facilement le faire une fois les bases de l’encodage et du décodage assimilées.
Il est important de noter que les lettres majuscules et minuscules sont codifiées de la même façon en code Morse. Cette indifférence à la casse est due au fait que le code Morse est principalement employé dans des contextes de communication où la distinction entre majuscules et minuscules n’est pas essentielle, contrairement aux conversations courantes.
Passons maintenant à la partie codage, pour l’encodage et le décodage.
Du texte anglais vers le code Morse
L’algorithme pour convertir un texte brut anglais en code Morse est relativement simple. Examinons cet algorithme de plus près.
- Commencez par créer un dictionnaire qui associe chaque caractère de l’alphabet anglais, les chiffres et la ponctuation à leur équivalent en code Morse.
- Parcourez ensuite le texte et ajoutez à votre résultat la séquence de code Morse correspondant à chaque caractère.
- Dans le code Morse, un espace sépare chaque caractère et un double espace sépare chaque mot.
- Ainsi, lorsqu’un espace est détecté dans le texte (indiquant une séparation de mots), vous devez ajouter un double espace à votre résultat.
- La chaîne de caractères résultante sera le code Morse que vous recherchez.
- Enfin, retournez le résultat.
Essayez d’écrire ce code en Python. Ne vous inquiétez pas si vous ne parvenez pas à tout coder du premier coup.
Voici le code pour convertir du texte brut en anglais en code Morse.
# dictionnaire associant caractères et code Morse CHARS_TO_MORSE_CODE_MAPPING = { 'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--', 'Z': '--..', '1': '.----', '2': '..---', '3': '...--', '4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.', '0': '-----', '.': '.-.-.-', ',': '--..--', '?': '..--..', '\'': '· − − − − ·', '!': '− · − · − −', '/': '− · · − ·', '(': '− · − − ·', ')': '− · − − · −', '&': '· − · · ·', ':': '− − − · · ·', ';': '− · − · − ·', '=': '− · · · −', '+': '· − · − ·', '-': '− · · · · −', '_': '· · − − · −', '"': '· − · · − ·', '$': '· · · − · · −', '@': '· − − · − ·', } # fonction pour encoder un texte anglais brut en code Morse def to_morse_code(english_plain_text): morse_code="" for char in english_plain_text: # vérification des espaces # ajout d'un espace après chaque caractère et d'un double espace après chaque mot if char == ' ': morse_code += ' ' else: # ajout du code Morse codé au résultat morse_code += CHARS_TO_MORSE_CODE_MAPPING[char.upper()] + ' ' return morse_code morse_code = to_morse_code( 'toptips.fr produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.' ) print(morse_code)
Le résultat du code Morse est visible ci-dessous. Vous devriez également obtenir un code similaire dans votre terminal si vous n’avez pas modifié le message.
--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.-
Félicitations ! Nous avons obtenu le code Morse. Vous savez ce qui vient ensuite.
Avant de plonger dans le programme de décodage, prenons un moment pour réfléchir à la façon dont nous allons écrire le code pour décoder.
…
Vous avez probablement pensé à inverser le dictionnaire CHARS_TO_MORSE_CODE_MAPPING comme l’une des étapes. Le faire manuellement est fastidieux et nécessiterait des mises à jour à chaque modification du mappage d’origine. Écrivons donc du code pour inverser le dictionnaire.
def reverse_mapping(mapping): reversed = {} for key, value in mapping.items(): reversed[value] = key return reversed
Le code ci-dessus échange simplement les paires clé-valeur du dictionnaire fourni. Le dictionnaire obtenu contiendra les valeurs comme nouvelles clés et les clés comme nouvelles valeurs.
Nous avons désormais tous les éléments nécessaires pour décoder le code Morse en texte anglais clair. Sans plus tarder, décodons le code Morse.
Du code Morse vers le texte anglais
Nous pouvons inverser le processus d’encodage du code Morse pour établir l’algorithme de décodage. Examinons l’algorithme de décodage du code Morse en texte brut anglais.
- Commencez par inverser le dictionnaire CHARS_TO_MORSE_CODE_MAPPING en utilisant la fonction utilitaire que nous avons écrite précédemment.
- Parcourez le code Morse, en conservant une trace du caractère actuel du code Morse.
- Si vous rencontrez un espace, cela signifie que vous avez un caractère de code Morse complet à décoder.
- Si le caractère de code Morse actuel est vide et que vous avez deux espaces consécutifs, ajoutez un séparateur de mots, qui est un simple espace dans le texte brut anglais.
- Si la condition ci-dessus est fausse, récupérez le caractère décodé du dictionnaire et ajoutez-le au résultat. Réinitialisez le caractère actuel du code Morse.
- Si vous n’avez pas rencontré d’espace, ajoutez-le au caractère Morse actuel.
- Si vous rencontrez un espace, cela signifie que vous avez un caractère de code Morse complet à décoder.
- S’il reste un dernier caractère, ajoutez-le au résultat après l’avoir décodé à l’aide du dictionnaire.
- Enfin, retournez le résultat.
Voici le code de l’algorithme décrit ci-dessus.
def reverse_mapping(mapping): # ajouter le code de la fonction depuis l'extrait précédent... CHARS_TO_MORSE_CODE_MAPPING = {} # ajouter les valeurs du dictionnaire MORSE_CODE_TO_CHARS_MAPPING = reverse_mapping(CHARS_TO_MORSE_CODE_MAPPING) def to_english_plain_text(morse_code): english_plain_text="" current_char_morse_code="" i = 0 while i < len(morse_code) - 1: # vérification de chaque caractère if morse_code[i] == ' ': # vérification du mot if len(current_char_morse_code) == 0 and morse_code[i + 1] == ' ': english_plain_text += ' ' i += 1 else: # ajout du caractère décodé au résultat english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[ current_char_morse_code] current_char_morse_code="" else: # ajout du caractère du code Morse au caractère actuel current_char_morse_code += morse_code[i] i += 1 # ajout du dernier caractère au résultat if len(current_char_morse_code) > 0: english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[ current_char_morse_code] return english_plain_text english_plain_text = to_english_plain_text( '--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.- ' ) print(english_plain_text)
J’ai utilisé le code Morse généré par la fonction d’encodage. Nous obtiendrons la sortie suivante si nous exécutons le programme ci-dessus.
toptips.fr PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.
Remarque : la sortie est en majuscules, car nous avons utilisé les majuscules pour le mappage dans le dictionnaire.
Conclusion
Nous avons constaté que la sortie de la fonction de décodage est en majuscules. Vous pouvez améliorer le programme en ajustant la sortie pour qu’elle corresponde aux majuscules et minuscules du texte anglais d’origine. Ceci n’est pas spécifique au code Morse, car les majuscules et minuscules utilisent le même schéma. N’hésitez pas à l’essayer, c’est une façon amusante de coder.
C’est tout pour ce tutoriel. Utilisez les programmes que nous avons écrits lors de votre prochaine rencontre avec le code Morse.
Bon codage 👨💻
Vous pouvez également regarder comment créer un mot de passe aléatoire en Python.