Cómo crear un traductor de código Morse usando Python

El código Morse es un método para codificar un mensaje utilizando puntos, guiones y espacios. Es ampliamente utilizado para comunicar mensajes en secreto.

Es posible que hayas visto el uso del código morse en escenas navales de muchas películas para comunicar mensajes. Estamos hablando del mismo código morse aquí, pero la única diferencia es que vamos a escribir un programa Python para traducir del inglés al código morse y viceversa.

código Morse

El código Morse tiene diferentes patrones para cada alfabeto inglés, número, puntuación y caracteres no latinos. Una vez que conozca los patrones del código morse para diferentes caracteres, será fácil codificarlos y decodificarlos. Puede consultar la página de Wikipedia del código morse para obtener más detalles y patrones.

En este tutorial, aprenderemos cómo codificar texto en inglés simple en código morse y viceversa. Usaremos alfabetos, números y puntuación en inglés mientras codificamos la decodificación. Si desea agregar más tipos de caracteres, puede hacerlo fácilmente una vez que aprenda la base de codificación y decodificación.

Una cosa para recordar es que tanto el alfabeto en mayúsculas como en minúsculas tienen el mismo patrón de código morse. Esto se debe a que el código morse se usa principalmente para la comunicación que no se preocupa por los casos alfabéticos como las conversaciones cotidianas.

Entremos en la parte de codificación para codificar y decodificar.

Inglés a código Morse

El algoritmo para convertir texto en inglés simple a código morse es sencillo. Comprobemos el algoritmo.

  • Cree un diccionario con las asignaciones de patrones de código morse con alfabetos, números y puntuaciones en inglés.
  • Itere sobre el texto y agregue el patrón de código morse de cada carácter de texto al resultado.
    • El código Morse contiene un espacio después de cada carácter y un doble espacio después de cada palabra.
    • Entonces, cuando encontramos espacio en el texto, que es el separador de palabras, debemos agregar doble espacio al resultado.
  • La cadena resultante será el código morse que necesitábamos.
  • Finalmente, devuelve el resultado.
  • Intenta escribir el código en Python. No se preocupe, incluso si no puede escribirlo completamente.

    Revisemos el código para codificar texto en inglés simple en código morse.

    # dictionary for mapping characters to morse code
    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': '-----',
        '.': '.-.-.-',
        ',': '--..--',
        '?': '..--..',
        ''': '· − − − − ·',
        '!': '− · − · − −',
        '/': '− · · − ·',
        '(': '− · − − ·',
        ')': '− · − − · −',
        '&': '· − · · ·',
        ':': '− − − · · ·',
        ';': '− · − · − ·',
        '=': '− · · · −',
        '+': '· − · − ·',
        '-': '− · · · · −',
        '_': '· · − − · −',
        '"': '· − · · − ·',
        '$': '· · · − · · −',
        '@': '· − − · − ·',
    }
    
    # function to encode plain English text to morse code
    def to_morse_code(english_plain_text):
        morse_code=""
        for char in english_plain_text:
            # checking for space
            # to add single space after every character and double space after every word
            if char == ' ':
                morse_code += '  '
            else:
                # adding encoded morse code to the result
                morse_code += CHARS_TO_MORSE_CODE_MAPPING[char.upper()] + ' '
        return morse_code
    
    morse_code = to_morse_code(
        'kirukiru.es produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.'
    )
    print(morse_code)

    Puede ver la salida del código morse a continuación. También debería ver un código morse similar en su terminal si no cambió el mensaje.

    --. . . -.- ..-. .-.. .- .-. .   .--. .-. --- -.. ..- -.-. . ...   .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.--   - . -.-. .... -. --- .-.. --- --. -.--   · − · · ·   ..-. .. -. .- -. -.-. .   .- .-. - .. -.-. .-.. . ... --..--   -- .- -.- . ...   - --- --- .-.. ... --..--   .- -. -..   .- .--. .. ...   - ---   .... . .-.. .--.   -... ..- ... .. -. . ... ... . ...   .- -. -..   .--. . --- .--. .-.. .   --. .-. --- .-- .-.-.-

    ¡Viva! tenemos el código morse. Ya sabes lo que viene después.

    Antes de saltar al programa de decodificación, detengámonos un momento y pensemos en cómo escribir código para decodificarlo.

    Debería haber pensado en invertir el diccionario CHARS_TO_MORSE_CODE_MAPPING como uno de los pasos. Hacerlo manualmente es agitado y necesita actualizarse cada vez que se cambia el mapeo original. Escribamos código para invertir el diccionario.

    def reverse_mapping(mapping):
        reversed = {}
        for key, value in mapping.items():
            reversed[value] = key
        return reversed

    Simplemente estamos invirtiendo los pares clave-valor del diccionario dado con el código anterior. El diccionario resultante contendrá valores como claves nuevas y claves como valores nuevos.

    Tenemos todas las piezas para decodificar el código morse en texto plano en inglés. Sin más preámbulos, decodifiquemos el código morse.

    codigo morse al ingles

    Podemos revertir el proceso de codificación del código morse para obtener el algoritmo de decodificación. Veamos el algoritmo para decodificar el código morse en texto simple en inglés.

  • Invierta el diccionario CHARS_TO_MORSE_CODE_MAPPING usando la función util que hemos escrito.
  • Repita el código morse y realice un seguimiento del carácter del código morse actual.
    • Si encontramos un espacio, significa que tenemos un carácter de código morse completo para decodificar.
      • Si el carácter del código morse actual está vacío y tenemos dos espacios consecutivos, agregue un separador de palabras que es un solo espacio en texto sin formato en inglés.
      • Si la condición anterior es falsa, obtenga el carácter decodificado del diccionario y agréguelo al resultado. Restablece el carácter del código morse actual.
    • Si no encontramos espacio, agréguelo al carácter morse actual.
  • Si existe el último carácter, agréguelo al resultado después de decodificar usando el diccionario.
  • Devuelve el resultado al final.
  • Revisemos el código del algoritmo anterior.

    def reverse_mapping(mapping):
        # add function code from the previous snippet...
    
    CHARS_TO_MORSE_CODE_MAPPING = {} # add dictionary values 
    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:
            # checking for each character
            if morse_code[i] == ' ':
                # checking for word
                if len(current_char_morse_code) == 0 and morse_code[i + 1] == ' ':
                    english_plain_text += ' '
                    i += 1
                else:
                    # adding decoded character to the result
                    english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[
                        current_char_morse_code]
                    current_char_morse_code=""
            else:
                # adding morse code char to the current character
                current_char_morse_code += morse_code[i]
            i += 1
    
        # adding last character to the result
        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)

    He dado el código morse que se genera a partir de la función de codificación. Obtendremos el siguiente resultado si ejecutamos el programa anterior.

    kirukiru.es PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.

    Nota: la salida está en el alfabeto en mayúsculas en inglés porque hemos usado el alfabeto en mayúsculas para mapear en el diccionario.

    Ultimas palabras

    Hemos visto que la salida de la función de decodificación está en mayúsculas. Puede mejorar el programa haciendo que la salida esté tal como está en el momento dado rastreando las mayúsculas y minúsculas del alfabeto inglés. Esto no está relacionado con el código morse, ya que tanto las mayúsculas como las minúsculas tienen el mismo patrón. Pruébalo, ya que es más divertido programar.

    Eso es todo por este tutorial. Use los programas que hemos escrito cuando encuentre el código morse la próxima vez.

    Codificación feliz 👨‍💻

    También puede ver cómo crear una contraseña aleatoria en Python.