Código Morse en Python

Este sencillo y pequeño programa toma una palabra o texto ingresado por el usuario y lo codifica en Clave Morse. Para tal objetivo vamos a crear un diccionario y posteriormente analizaremos el texto o palabra ingresada por el usuario.

Código fuente
#!/usr/bin/env python
# -*- coding: utf-8 -*-

codigo_morse = {
    "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": "----.",
    
    ".": ".-.-.-", ",": "-.-.--", "?": "..--..", "\"": ".-..-."
}

texto_codificado = ""

palabra = input("Ingrese una palabra o texto a codificar: ")

for c in palabra:
    if c != " " and c.lower() in codigo_morse:
        texto_codificado += codigo_morse[c.lower()]
    else:
        texto_codificado += c
    
print("Texto codificado: {}".format(texto_codificado))

Antes de iniciar es mejor explicar para qué sirven las dos primeras líneas. La línea #!/usr/bin/env python es muy famosa en el mundo de los sistemas tipo Unix, se llama Shebang y permite ejecutar programas que requieren de un intérprete, directamente sobre la línea de comandos sin necesidad de escribir el nombre del intérprete; por ejemplo, ./CodigoMorse.py en lugar de python CodigoMorse.py.

la línea # -*- coding: utf-8 -*- es usada para codificar y usar caracteres especiales correctamente, como los acentuados, la ñ o de otros idiomas. Esta línea siempre debe ir al inicio del archivo o después de la línea Shebang.

Creando el diccionario con el Código Morse
codigo_morse = {
    "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": "----.",
    
    ".": ".-.-.-", ",": "-.-.--", "?": "..--..", "\"": ".-..-."
}

Creamos un diccionario que contiene el abecedario de la a hasta la z (incluyendo la ñ), los números del 0 al 9 y otros caracteres. Cada uno de estos valores tiene una representaciones en código morse después de los signos «:».

Creando variable que almacena el texto codificado
texto_codificado = ""

Creamos la variable que va a almacenar el texto codificado en Clave Morse, asignando un string vacío. Más adelante se explica cómo la usamos para generar un nuevo string con la codificación, ya que no podremos modificar la palabra que ingrese el usuario debido a que los strings en Python son inmutables.

Leyendo palabra o texto ingresado por el usuario
palabra = input("Ingrese una palabra o texto a codificar: ")

Le solicitamos al usuario que ingrese una palabra o texto y luego lo leemos con la función input, por último guardamos la información en la variable palabra.

Bucle for, codificando la palabra o texto
for c in palabra:
    if c != " " and c.lower() in codigo_morse:
        texto_codificado += codigo_morse[c.lower()]
    else:
        texto_codificado += c

Aquí es en donde realmente ocurre la «magia», con el bucle for vamos a iterar sobre cada caracter del string ingresado por el usuario (incluyendo espacios). La sentencia if hace 2 cosas, primero verifica que cada carácter sea distinto a un carácter vacío con la expresión c != " " y después con la expresión c.lower() in codigo_morse verificamos si cada carácter se encuentra en el diccionario creado al principio, el método .lower() convierte a minúscula cada carácter.

Si la anterior verificación resulta True, entonces accedemos a la representación en Clave Morse del carácter usando la expresión codigo_morse[c.lower()] y luego lo concatenamos con el string en la variable texto_codificado y se asigna de nuevo a la misma variable; es aquí en donde generamos un nuevo string con la codificación apropiada. Si la anterior sentencia es False, entonces sigue la sentencia else y la expresión en la línea #5 concatena al string cualquier carácter no encontrado en el diccionario; por ejemplo, los caracteres «/», «¿», «@», «:».

Mostrando palabra o texto codificado
print("Texto codificado: {}".format(texto_codificado))

Por último mostramos el resultado de la palabra codificada en Código Morse, el método .format() formatea el string y reemplaza el par de «{}» por el contenido en la variable texto_codificado.

Ejecutando el programa

Al ejecutar el programa nos muestra un resultado de esta forma:

[fixedtorres@linuxero]$ ./CodigoMorse.py
Ingrese una palabra o texto a codificar: Fecha: 19/09/2018
Texto codificado: ..-..-.-......-: .--------./---------./..--------.-------..
[fixedtorres@linuxero]$

El texto o palabra se codifica respetando caracteres que no están en el diccionario.



Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *