1

I have been making a morse code translator and I have just arrived at a problem with translating from morse. Here is my code:

def translate(self, message):
    message_words = message.split('   ')
    message_in_morse = ['Your message is: ']
    letters = {'.-':'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', '..--..':'?', '.-.-.-':'.', '--..--':',', '   ':' ', ' ':''}
    morse_text = ''
    for letter in message_words:
        message_in_morse.append(letters.get(letter.lower()))
        message_in_morse.append(' ')
    try:
        morse_text = ''.join(message_in_morse)
    except Exception as e:
        print('Error: ', str(e))
    return morse_text

I am importing it and running translate('.- .-') from another program. This should output: Your message is: aa When I run this, it just says: Error: sequence item 1: expected str instance, NoneType found I don't know what this means or how to fix it.

Pazzel
  • 27
  • 5

2 Answers2

0

Your try/except confused me for a while.

Still, I managed to find your typo:

def translate(self, message):
    message_words = message.split(' ')  # split by one space
    message_in_morse = ['Your message is: ']
    letters = {'.-':'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', '..--..':'?', '.-.-.-':'.', '--..--':',', '   ':' ', ' ':''}
    morse_text = ''
    for letter in message_words:
        message_in_morse.append(letters.get(letter.lower()))
    try:
        morse_text = ''.join(message_in_morse)
    except Exception as e:
        print('Error: ', str(e))
    return morse_text
print(translate('.- .-'))

Output:

Your message is: aa 

Also, you should try to allow for invalid morse:

message_in_morse.append(letters.get(letter.lower(), '#'))

This will give # for any unknown morse code.

Update: removed the extra space between decoded characters.

quamrana
  • 37,849
  • 12
  • 53
  • 71
0

I've discovered how to get it to work. Use nested for loops to split the message into words, then each word gets split into separate letters.

        message_words = message.split('   ')
        letters_in_message = []
        for word in message_words:
            letters_in_message.append(word.split(' '))
        message_in_morse = ['Your message: ']
        letters = {'.-':'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', '..--..':'?', '.-.-.-':'.', '--..--':',', '   ':' ', ';':' '}
        morse_text = ''
        for word in letters_in_message:
            for letter in word:
                message_in_morse.append(letters.get(letter.lower(), '#'))
            message_in_morse.append(' ')
        morse_text = ''.join(message_in_morse)
        return morse_text
Pazzel
  • 27
  • 5