Vous êtes sur la page 1sur 2

Conversor de texto a cdigo Morse en Python

Vamos a implementar una funcin llamada Morse() de modo que cumpla con los siguientes
requisitos:

Esta funcin se encargar de abrir un archivo existente, leer su contenido, traducirlo al cdigo
Morse y almacenar el resultado en un archivo nuevo que tenga el mismo nombre pero con la
extensin *.mrs.

Condiciones:

El archivo origen debe existir y debe tener la extensin *.txt.


Al ejecutar la funcin le pasaremos el nombre del archivo origen como parmetro.
La funcin crear el archivo nuevo con la extensin *.mrs.
Los caracteres del cdigo Morse sern lneas "-" y puntos ".".
Para poder diferenciar unas letras de otras se aadirn espacios en blanco despus de
cada cdigo.
Junto los caracteres del cdigo Morse se almacenar la informacin necesaria para
identificar las letras maysculas.
Se deben respetar los espacios y los saltos de carro del archivo original.

Para que a la hora de volver a pasar de Morse a texto normal no tengamos problemas entre los guiones "-" que puedan
existir en la carta original y los creados por la funcin Morse(), he codificado el guin como una sucesin de 10 guiones
en Morse.

Descripcin lnea a lnea de la primera propuesta:

1. Definimos la funcin e indicamos que habr una parmetro de entrada.


2. Si el nombre del archivo no termina en .txt ...
3. ... le aadimos la extensin al nombre que nos han pasado por parmetro.
4. Abrimos el archivo en modo lectura y lo asignamos a la variable origen.
5. Calculamos la distancia a la que se encuentra el punto en el nombre del archivo, ya necesitamos el
mismo nombre para el archivo de salida.
6. Empezamos a construir el nombre del fichero que vamos a generar para almacenar el cdigo Morse.
slo copiamos el nombre sin la extensin.
7. Le aadimos la extensin .mrs al nombre del archivo de salida.
8. Abrimos el archivo de salida en modo escritura "a". Si no existe crea un archivo nuevo, pero si ya
existe un archivo con dicho nombre, lo edita y sigue escribiendo al final del mismo.
9. Creamos un diccionario llamado nm donde le aadimos las claves y los valores correspondientes al
cdigo Morse.
10. Para cada linea extrada del archivo de lectura ...
11. ... vaciamos la lnea de salida. esta variable la vamos a utilizar para ir almacenando los caracteres
hasta que se complete una lnea. al empezar una lnea nueva vaciamos su contenido.
12. Para cada letra de la lnea
13. Si la letra est en el diccionario...
14. ... aadimos a la variable lnea lo que ya tiene, ms el equivalente de la letra en morse y un
espacio en blanco. (Este espacio en blanco es para poder separar los puntos y las rallas pertenecientes a las
distintas letras).
15. Si no est en el diccionario miramos si est en el diccionario la misma letra pero en minsculas.
16. Si se trata de una letra en maysculas, en la lnea de salida aadimos lo que ya hay ms el
identificador que hemos creado para avisar que la siguiente letra tiene que ir en maysculas, ms el
equivalente en morse de la letra en minsculas, ms el espacio en blanco para diferenciar de las prximas
letras.
17. Si la letra no esta en el diccionario ...
18. ... la aadimos tal y como est en la linea de salida.
19. Una vez tenemos la lnea entera la escribimos en el archivo de salida. Si siguen habiendo ms lineas
en el archivo de lectura cogemos la siguiente y saltamos al paso #11.
20. Una vez se ha leido y escrito todo cerramos el archivo de lectura.
21. Cerramos el archivo de escritura.
Cdigo python para copiar:
Para poder probar y modificar lo explicado en estas lneas he aadido el cdigo en Python.
Recuerde que los espacios y las tabulaciones son importantes para conocer cuando termina un
bucle if o un bucle for.
#!/usr/bin/env python

def Morse(nombre): #1
if not(nombre.endswith(".txt")): #2
nombre = nombre+".txt" #3
origen=open(nombre,"r") #4
pospunto = nombre.find('.') #5
nombresalida = nombre[:pospunto] #6
nombresalida = nombresalida+'.mrs' #7
destino = open(nombresalida,"a") #8
nm = {'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': '----.',
'.': '.-.-.-',',': '--..--','?': '..--..','\"': '.-..-.','-': '----------',} #9

for linea in origen.readlines(): #10


lineasalida = '' #11
for i in linea: #12
if nm.has_key(i): #13
lineasalida = lineasalida+nm[i]+" " #14
elif nm.has_key(i.lower()): #15
lineasalida = lineasalida+"mayu"+nm[i.lower()]+" " #16
else: #17
lineasalida = lineasalida + i #18
destino.write(lineasalida) #19
origen.close() #20
destino.close() #21

Muestra:
Para poder probar el correcto funcionamiento del programa he introducido el siguiente texto:

El clima de nuestro planeta est sufriendo importantes alteraciones desde hace varias dcadas, principalmente a
consecuencia de la emisin de gases que potencian el efecto invernadero (GEI) , originados por el uso extendido de
combustibles fsiles, como el petrleo, el gas o el carbn-, la descomposicin de residuos urbanos o ganaderos y los
cambios en el uso de la tierra.

Existen ya pruebas irrefutables de este cambio. La temperatura de la atmsfera a nivel superficial ha sufrido un
calentamiento progresivo desde el comienzo de la era industrial hasta nuestros das de 0,6 C de media, registrndose
un aumento mayor en algunas zonas como los polos o el arco mediterrneo.

Los aos ms clidos de los que se tiene registro se han producido a partir de 1990, as como cambios estacionales
importantes, derretimiento de superficies heladas, subida del nivel de los ocanos, cambios en los flujos de circulacin
general de las corrientes marinas.

...

Futuras lneas de actuacin:


Como se puede ver, la aplicacin tiene problemas con los caracteres ascii extendidos, una futura
lnea de actuacin podra ser la de corregir este problema.

Vous aimerez peut-être aussi