codigo morse a ingles python3

Quiero convertir el código Morse al inglés usando Python 3+. He logrado convertir el inglés al código morse usando este http://code.activestate.com/recipes/578407-simple-morse-code-translator-in-python/

Pero quiero convertir el código Morse al inglés

He intentado hacerlo un personaje a la vez, pero el problema es que las letras de código morse no son tan largas como las letras inglesas, por lo que E es “”. y S es “…”, el problema que tengo es que el bucle del diccionario encontrará “.” y empareje con E, así que en lugar de obtener S obtengo “EEE”, intenté solucionarlo detectando espacios y haciéndolo palabra por palabra, pero en lugar de buscar las letras en la palabra, busca la palabra completa en contra de diccionario soy nuevo en Python y diccionarios y no sé cómo diferenciar entre una E “. y una S “…” al buscar en mi diccionario

Aqui esta mi codigo

# defines the dictionary to convert morse to english CODE_reversed = {'..-.': 'F', '-..-': 'X', '.--.': 'P', '-': 'T', '..---': '2', '....-': '4', '-----': '0', '--...': '7', '...-': 'V', '-.-.': 'C', '.': 'E', '.---': 'J', '---': 'O', '-.-': 'K', '----.': '9', '..': 'I', '.-..': 'L', '.....': '5', '...--': '3', '-.--': 'Y', '-....': '6', '.--': 'W', '....': 'H', '-.': 'N', '.-.': 'R', '-...': 'B', '---..': '8', '--..': 'Z', '-..': 'D', '--.-': 'Q', '--.': 'G', '--': 'M', '..-': 'U', '.-': 'A', '...': 'S', '.----': '1'} def main(): #takes user message and makes it upper case msg = input('MESSAGE: ') msg = msg.upper() addtolist = "" # creates blank string message = [] # creates blank list for i in msg: addtolist = addtolist + i # adds every letter in MSG into a string until it finds a space addtolist.upper() # makes every letter uppercase if i == " ": # if it detects a space message.extend(addtolist) # adds the previously created addtolist to a list, this makes one word addtolist = "" # clears previous variable for i in message: # for every word in the list str(i) # make it into a string print(CODE_reversed[i()]) # search the dictionary for that word if __name__ == "__main__": main() 

Este código toma una palabra e intenta buscarlo en el diccionario, pero no funciona. También he intentado buscar cada letra de código morse individual contra el diccionario, pero el problema es que no se puede saber cuándo comienza una letra y termina, así que “…” sale como “EEE” en lugar de “S” y no sé cómo solucionarlo

También he intentado buscar soluciones, pero solo las he encontrado en Java y no sé Java

Una vez que define el mapeo en una dirección, puede usar una comprensión de dictado para mapearlo de la otra manera.

 CODE = {'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': '----.' } CODE_REVERSED = {value:key for key,value in CODE.items()} 

Luego puedes usar join con una expresión generadora para realizar las traducciones.

 def to_morse(s): return ' '.join(CODE.get(i.upper()) for i in s) def from_morse(s): return ''.join(CODE_REVERSED.get(i) for i in s.split()) >>> to_morse('hello') '.... . .-.. .-.. ---' >>> from_morse('.... . .-.. .-.. ---') 'HELLO' 
  mor = {'.-': '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'} print('''Enter your msg in Morse. Notic that: 1- Use / to separate the letters and space to separate words. 2- Your message must contain only letters and numbers. 3- '?' in output means that your input was unknowed. >>> ''', end = '') msg = input(' ') out = [] letter = [] j = -1 for i in msg.split(' '): j += 1 letter += [i.split('/')] for k in range(len(letter[j])): out += mor.get(letter[j][k], '?') out += ' ' print('\n >>> Your msg is: ', end = '') print(''.join(out))` 

salida:

 Enter your msg in Morse. Notic that: 1- Use / to separate the letters and space to separate words. 2- Your message must contain only letters and numbers. 3- '?' in output means that your input was unknowed. >>> ...././.-../.-.. .--/---/.-./.-../-.. (for example) >>> Your msg is: HELLO WORLD