Puedes hacerlo mucho más sencillo con un diccionario, así te ahorras tanto condicional que ralentizan el programa. Si quieres practicar prueba a hacerlo así
Bueno es
Te dejo mi versión por si te decides a hacerlo, la tomes como ejemplo:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class morse:
def __init__(self,texto):
self.texto = texto
self.diccionario = {"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":"----.","!":"-.-.--","?":"..--..",".":".-.-.-"," ":" ","'":"--..--"}
self.parseador()
def parseador(self):
self.acumulador = ""
for self.elemento in self.texto.lower():
self.acumulador = self.acumulador + self.diccionario[self.elemento]
print self.acumulador
if __name__ == '__main__':
texto = raw_input("Inserta el texto a morsear>")
instancia = morse(texto)
Y se podría simplificar mucho más, sin usar POO:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
texto,acumulador,diccionario= (raw_input("Inserta el texto a morsear>"),"",{"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":"----.","!":"-.-.--","?":"..--..",".":".-.-.-"," ":" ","'":"--..--"})
for letra in texto.lower():
acumulador = acumulador + diccionario[letra]
print acumulador