TP Morse Corrigé¶
On associe à chaque caractère une valeur permettant de transformer l'arbre de la figure 1 en arbre binaire de recherche.
De façon logique, la construction de l'arbre binaire de recherche n'est pas indispensable pour la fonction decode
mais elle est tout de même nécessaire car la classe binarytree
n'accepte que des entiers pour valeur associées aux noeuds.
Elle le sera si on veut implémenter une fonction code
qui traduit un message vers le code morse.
In [1]:
Copied!
MORSE_DICT = { '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':'-----', ', ':'--..--', '.':'.-.-.-',
'?':'..--..', '/':'-..-.', '-':'-....-',
'(':'-.--.', ')':'-.--.-'}
MORSE_DICT = { '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':'-----', ', ':'--..--', '.':'.-.-.-',
'?':'..--..', '/':'-..-.', '-':'-....-',
'(':'-.--.', ')':'-.--.-'}
In [6]:
Copied!
MORSE_CODE_DICT = { 'A':10, 'B':15,
'C':19, 'D':16, 'E':7,
'F':5, 'G':24, 'H':1,
'I':4, 'J':13, 'K':20,
'L':8, 'M':26, 'N':18,
'O':27, 'P':11, 'Q':25,
'R':9, 'S':2, 'T':22,
'U':6, 'V':3, 'W':12,
'X':16, 'Y':21, 'Z':23, '*':14}
MORSE_CODE_DICT = { 'A':10, 'B':15,
'C':19, 'D':16, 'E':7,
'F':5, 'G':24, 'H':1,
'I':4, 'J':13, 'K':20,
'L':8, 'M':26, 'N':18,
'O':27, 'P':11, 'Q':25,
'R':9, 'S':2, 'T':22,
'U':6, 'V':3, 'W':12,
'X':16, 'Y':21, 'Z':23, '*':14}
In [10]:
Copied!
from binarytree import Node, bst
MORSE_CODE_DICT = { 'A':10, 'B':15,
'C':19, 'D':16, 'E':7,
'F':5, 'G':24, 'H':1,
'I':4, 'J':13, 'K':20,
'L':8, 'M':26, 'N':18,
'O':27, 'P':11, 'Q':25,
'R':9, 'S':2, 'T':22,
'U':6, 'V':3, 'W':12,
'X':16, 'Y':21, 'Z':23, '*':14}
root = Node(14)
root.left = Node(7)
root.left.left = Node(4)
root.left.left.left = Node(2)
root.left.left.left.left = Node(1)
root.left.left.left.right = Node(3)
root.left.left.right = Node(6)
root.left.left.right.left = Node(5)
root.left.right = Node(10)
root.left.right.left = Node(9)
root.left.right.left.left = Node(8)
root.left.right.right = Node(12)
root.left.right.right.left = Node(11)
root.left.right.right.right = Node(13)
root.right = Node(E)
root.right.left = Node(18)
root.right.left.left = Node(16)
root.right.left.left.left = Node(15)
root.right.left.left.right = Node(17)
root.right.left.right = Node(20)
root.right.left.right.left = Node(19)
root.right.left.right.right = Node(21)
root.right.right = Node(26)
root.right.right.left = Node(24)
root.right.right.left.left = Node(23)
root.right.right.left.right = Node(25)
root.right.right.right = Node(27)
print(root)
print(root.is_bst)
from binarytree import Node, bst
MORSE_CODE_DICT = { 'A':10, 'B':15,
'C':19, 'D':16, 'E':7,
'F':5, 'G':24, 'H':1,
'I':4, 'J':13, 'K':20,
'L':8, 'M':26, 'N':18,
'O':27, 'P':11, 'Q':25,
'R':9, 'S':2, 'T':22,
'U':6, 'V':3, 'W':12,
'X':16, 'Y':21, 'Z':23, '*':14}
root = Node(14)
root.left = Node(7)
root.left.left = Node(4)
root.left.left.left = Node(2)
root.left.left.left.left = Node(1)
root.left.left.left.right = Node(3)
root.left.left.right = Node(6)
root.left.left.right.left = Node(5)
root.left.right = Node(10)
root.left.right.left = Node(9)
root.left.right.left.left = Node(8)
root.left.right.right = Node(12)
root.left.right.right.left = Node(11)
root.left.right.right.right = Node(13)
root.right = Node(E)
root.right.left = Node(18)
root.right.left.left = Node(16)
root.right.left.left.left = Node(15)
root.right.left.left.right = Node(17)
root.right.left.right = Node(20)
root.right.left.right.left = Node(19)
root.right.left.right.right = Node(21)
root.right.right = Node(26)
root.right.right.left = Node(24)
root.right.right.left.left = Node(23)
root.right.right.left.right = Node(25)
root.right.right.right = Node(27)
print(root)
print(root.is_bst)
______________14_____________________ / \ ____7__ __________22_________ / \ / \ __4__ 10___ ____18___ ____26 / \ / \ / \ / \ 2 6 8 _12 _16 _20 _24 27 / \ / / \ / \ / \ / \ 1 3 5 11 13 15 17 19 21 23 25 True
In [11]:
Copied!
def decode(message):
lettres = message.split(" ") # Le message est découpé par lettre à chaque espace (lettres est une liste)
message_decode = "" # initialisation d'une chaine de caractères vides (pour le message décodé)
for lettre in lettres: # Parcours de chaque du message codé
noeud = root # Début du parcours à la racine
for symbole in lettre: # Pour chaque caractère (. ou -) du code morse
if symbole == ".": # on détermine si on parcours l'arbre à gauche ou à droite
noeud = noeud.left
else:
noeud = noeud.right
for clé, valeur in MORSE_CODE_DICT.items(): # On a obtenu un noeud correspondant à la lettre de l'alphabet.
if noeud.value == valeur: # On recherche la lettre correspondant à la valeur du noeud obtenu
message_decode += clé # On ajoute la lettre au message décodé
return message_decode
decode("... --- ...")
def decode(message):
lettres = message.split(" ") # Le message est découpé par lettre à chaque espace (lettres est une liste)
message_decode = "" # initialisation d'une chaine de caractères vides (pour le message décodé)
for lettre in lettres: # Parcours de chaque du message codé
noeud = root # Début du parcours à la racine
for symbole in lettre: # Pour chaque caractère (. ou -) du code morse
if symbole == ".": # on détermine si on parcours l'arbre à gauche ou à droite
noeud = noeud.left
else:
noeud = noeud.right
for clé, valeur in MORSE_CODE_DICT.items(): # On a obtenu un noeud correspondant à la lettre de l'alphabet.
if noeud.value == valeur: # On recherche la lettre correspondant à la valeur du noeud obtenu
message_decode += clé # On ajoute la lettre au message décodé
return message_decode
decode("... --- ...")
2 27 2
Out[11]:
'SOS'