Voir le flux RSS

danielhagnoul

Python. Traduire un texte en morse et vice versa.

Noter ce billet
par , 12/11/2019 à 20h02 (248 Affichages)
Lire les commentaires dans le code.

Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#! python3
# coding: utf-8
 
from termcolor import cprint
import unicodedata
 
"""
Prise en charge partielle de l'alphabet morse, voir : https://fr.wikipedia.org/wiki/Code_Morse_international
Attention, morse_vers_texte() ne fonctionne généralement pas avec du code morse généré ailleurs.
"""
 
 
signes = ['.-', '-...', '-.-.', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..',
          '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--',
          '--..', '.-.-.-', '--..--', '..--..', '.----.', '-.-.--', '---...', '-.-.-.', '.-..-.',
          '-----', '.----', '..---', '...--', '....-', '.....', '-....', '--...', '---..', '----.']
lettres = ['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', '.', ',', '?', "'", '!', ':', ';', '"',
           '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
S2L = dict(zip(signes, lettres))
L2S = dict(zip(lettres, signes))
 
 
def texte_vers_morse(texte):
    """Transforme un texte accentués, sans retour à la ligne, en morse"""
 
    texte = unicodedata.normalize('NFKD', texte).encode(
        'ASCII', 'ignore').decode('ASCII')
    texte = texte.upper()
    lst_words = texte.split(' ')
    texte_signes = ''
    for word in lst_words:
        texte_signes += '  '
        for lettre in word:
            texte_signes += ' ' + L2S[lettre]
    return texte_signes[3:]
 
 
def morse_vers_texte(morse):
    """Transforme le code morse généré par texte_vers_morse() en texte ASCII"""
 
    lst_words = morse.split('  ')
    lst_signes = [word.split(' ') for word in lst_words]
    texte_lettres = ''
    for word in lst_signes:
        texte_lettres += ' '
        for signe in word:
            if signe != '':
                texte_lettres += S2L[signe]
    return texte_lettres[1:]
 
 
if __name__ == "__main__":
    morse = texte_vers_morse(
        "Bonjour, je suis débutant en Python. Je teste à tout va, c'est plus de 200 tests réalisés !")
 
    cprint(morse, 'red')
 
    texte = morse_vers_texte(morse)
 
    cprint(texte, 'green')
'''

Nom : morse.PNG
Affichages : 37
Taille : 8,0 Ko

Licence Creative Commons Attribution 2.0 Belgique

Envoyer le billet « Python. Traduire un texte en morse et vice versa. » dans le blog Viadeo Envoyer le billet « Python. Traduire un texte en morse et vice versa. » dans le blog Twitter Envoyer le billet « Python. Traduire un texte en morse et vice versa. » dans le blog Google Envoyer le billet « Python. Traduire un texte en morse et vice versa. » dans le blog Facebook Envoyer le billet « Python. Traduire un texte en morse et vice versa. » dans le blog Digg Envoyer le billet « Python. Traduire un texte en morse et vice versa. » dans le blog Delicious Envoyer le billet « Python. Traduire un texte en morse et vice versa. » dans le blog MySpace Envoyer le billet « Python. Traduire un texte en morse et vice versa. » dans le blog Yahoo

Commentaires

  1. Avatar de bistouille
    • |
    • permalink
    En utilisant la méthode get des dictionnaires, tu peux améliorer et réduire tes deux fonctions.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def texte_vers_morse(texte):
        """Transforme un texte accentués, sans retour à la ligne, en morse"""
        texte = unicodedata.normalize('NFKD', texte).encode(
            'ASCII', 'ignore').decode('ASCII')
        morse = tuple(L2S.get(c.upper(), '') for c in texte)
        return ' '.join(morse)
     
    def morse_vers_texte(morse):
        """Transforme le code morse généré par texte_vers_morse() en texte ASCII"""
        lst = tuple(S2L.get(s, ' ') for s in morse.split(' '))
        return ''.join(lst)
  2. Avatar de danielhagnoul
    • |
    • permalink
    Bonsoir

    Superbe simplification de mon code, bravo !
    Merci d'avoir posté cette élégante solution.