NSI Première

Les Dictionnaire​s


Autour du code morse...

Correction du DM

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': '---'}

Les principales méthodes sur les dictionnaires

In [1]:
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)

À faire 1:

É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 :

°°°

In [2]:
def encode_lettre(lettre,morse):
    lettre = lettre.upper()
    if lettre in morse:
        return morse[lettre]

print(encode_lettre('S',morse))

À faire 2:

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

In [3]:
# à faire 2
morse[""] = '*'

À faire 3 :

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 :

°°°*

In [4]:
# à faire 3

def encode_lettre(lettre,morse):
    lettre.upper()
    if lettre in morse:
        return morse[lettre] + morse[""]

print(encode_lettre('S',morse))
°°°*

À faire 4:

É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 :

°°°*---*°°°*
In [5]:
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))
°°°*---*°°°*

À faire 5:

É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']
In [6]:
# à 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

À faire 6:

Décoder le message suivant :

message = '-°°°*°-°*°-*°°°-*---*/*°---*°*°°-*-°*°*/*°--°*°-*-°°*°-*°--*°-*-°*/*°-°°*°-*/*-°*°°°*°°*/*°*°°°*-*/*°-*°°°-*°*-°-°*/*-*---*°°*/*'
In [7]:
# à faire 6
message = '-°°°*°-°*°-*°°°-*---*/*°---*°*°°-*-°*°*/*°--°*°-*-°°*°-*°--*°-*-°*/*°-°°*°-*/*-°*°°°*°°*/*°*°°°*-*/*°-*°°°-*°*-°-°*/*-*---*°°*/*'
print(decode_mots(message, morse))
BRAVO JEUNE PADAWAN LA NSI EST AVEC TOI