L'alphabet morse, ou code morse, est un code permettant de transmettre un texte à l'aide de séries d'impulsions courtes et longues. Inventé en 1835 par Samuel Morse pour la télégraphie, ce code assigne à chaque lettre, chiffre et signe de ponctuation une combinaison unique de signaux intermittents. Considéré comme le précurseur des communications numériques, le code morse a depuis le 1er février 1999 été délaissé au profit d'un système satellitaire pour les communications maritimes.
C'est en 1838 que naît l'alphabet " morse " que nous connaissons. Deux types d'impulsions sont utilisés. Les impulsions courtes (notées " . ", point) qui correspondent à une impulsion électrique de 1/4 de seconde et les longues (notées " - ", trait) à une impulsion de 3/4 de seconde.
Par exemple :
-°-° --- -°° ° / -- --- °-° °°° °
C O D E (espace) M O R S E
On représente le code morse à l'aide d'un dictionnaire, on ne s'intéresse qu'aux lettres en majuscules non accentuées. Pour l'espace on utilise le slash (par exemple).
morse = {' ': '/', 'E': '°', 'I': '°°', 'S': '°°°', 'H': '°°°°', 'V': '°°°-', 'U': '°°-', 'F': '°°-°', 'A': '°-', 'R': '°-°', 'L': '°-°°', 'W': '°--', 'P': '°--°', 'J': '°---', 'T': '-', 'N': '-°', 'D': '-°°', 'B': '-°°°', 'X': '-°°-', 'K': '-°-', 'C': '-°-°', 'Y': '-°--', 'M': '--', 'G': '--°', 'Z': '--°°', 'Q': '--°-', 'O': '---'}
morse = {' ': '/', 'E': '°', 'I': '°°', 'S': '°°°', 'H': '°°°°', 'V': '°°°-', 'U': '°°-', 'F': '°°-°', 'A': '°-', 'R': '°-°', 'L': '°-°°', 'W': '°--', 'P': '°--°', 'J': '°---', 'T': '-', 'N': '-°', 'D': '-°°', 'B': '-°°°', 'X': '-°°-', 'K': '-°-', 'C': '-°-°', 'Y': '-°--', 'M': '--', 'G': '--°', 'Z': '--°°', 'Q': '--°-', 'O': '---'}
# afficher la valeur d'une clé
print(morse['S'])
# tester la présence d'une clé
if 'S' in morse.keys():
print('Yes')
# tester la présence d'une valeur
if '°°°' in morse.values():
print('Yes')
#tester la présence d'une clé
if 'S' in morse:
print('Yes')
# afficher les clés
print(morse.keys())
# afficher les couples (clé,valeur)
print(morse.items())
# itérer sur les clés
for keys in morse:
print(keys, end=" ")
print(' ')
# accéder à une clé à partir d'une valeur
for key,value in morse.items():
if value == '°°°':
print(key)
Écrire une fonction encode_lettre(lettre)
qui prend en paramètre une lettre et le dictionnaire morse et qui renvoie son code morse.
Exemple de résultat attendu :
print(encode_lettre('S',morse))
Affiche :
°°°
def encode_lettre(lettre,morse):
lettre = lettre.upper()
if lettre in morse:
return morse[lettre]
print(encode_lettre('S',morse))
Rajouter au dictionnaire la clé "*"
avec comme valeur '*'
, qui nous servira à séparer les lettres.
Rappel: Pour ajouter un couple (clé,valeur) à un dictionnaire, il suffit d'exécuter mon_dico[clé]=valeur
# à faire 2
morse[""] = '*'
Modifier la fonction précédente pour qu'elle renvoie la lettre codée et une étoile.
Exemple de résultat attendu :
print(encode_lettre('S',morse))
Affiche :
°°°*
# à faire 3
def encode_lettre(lettre,morse):
lettre.upper()
if lettre in morse:
return morse[lettre] + morse[""]
print(encode_lettre('S',morse))
Écrire une fonction encode_mots(mots,morse)
qui prend en paramètre un message et le dictionnaire et qui renvoie le message codé en morse.
Exemple de résultat attendu :
print(encode_mot('sos',morse))
Affiche :
°°°*---*°°°*
def encode_mots(mots,morse):
# à faire 4
mots = mots.upper()
mots_code = ""
for lettre in mots:
mots_code += encode_lettre(lettre, morse)
return mots_code
print(encode_mots('sos',morse))
Écrire une fonction decode_mots(code,morse)
qui prend en paramètre un message codé et le dictionnaire et qui renvoie le message décodé.
Aide : On pourra utiliser la méthode list(phrase.split(caractère))
qui permet de lister les mots d'une phrase en repérant le caractère \
comme séparateur.
Exemple ce code :
phrase = "hello world"
print(list(phrase.split(" ")))
print(list(phrase.split("o")))
affiche :
['hello', 'world']
['hell', ' w', 'rld']
# à faire 5
def decode_mots(code, morse):
message_decode = ""
for lettre in list(code.split('*')):
for cle, val in morse.items():
if lettre == val:
message_decode += cle
return message_decode
Décoder le message suivant :
message = '-°°°*°-°*°-*°°°-*---*/*°---*°*°°-*-°*°*/*°--°*°-*-°°*°-*°--*°-*-°*/*°-°°*°-*/*-°*°°°*°°*/*°*°°°*-*/*°-*°°°-*°*-°-°*/*-*---*°°*/*'
# à faire 6
message = '-°°°*°-°*°-*°°°-*---*/*°---*°*°°-*-°*°*/*°--°*°-*-°°*°-*°--*°-*-°*/*°-°°*°-*/*-°*°°°*°°*/*°*°°°*-*/*°-*°°°-*°*-°-°*/*-*---*°°*/*'
print(decode_mots(message, morse))