азбука Морзе на английский python3

Я хочу преобразовать код Морзе на английский язык с помощью Python 3+ Мне удалось преобразовать английский в код Морзе, используя это http://code.activestate.com/recipes/578407-simple-morse-code-translator-in-python/

но я хочу преобразовать код Морзе в английский

Я попытался сделать это по одному charecter за раз, но проблема в том, что буквы кода Морзе не являются 1 charecter длинными, как английские буквы, поэтому E "."и S "..."проблема у меня что словарный цикл найдет "."и сопоставить его С Е, так вместо того, я получаю "е е е" я попытался исправить это, обнаружив пробелы и делая это слово за раз, но вместо того, чтобы искать буквы в слове, он ищет все слово против словаря я новичок в Python и словарях, и я не знаю, как различаться между E "."и S "..."при поиске в моем словаре

вот мой код

# 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()

этот код принимает слово, и пытается найти его в словаре, но это не работает я также попытался найти каждую букву кода Морзе в словаре, но проблема в том, что вы не можете сказать, когда начинается и заканчивается буква, поэтому "..."выходит как" EEE "вместо " S", и я не знаю, как это исправить

Я также пытался искать решения, но нашел их только в Java, и я не знаю Java

2 ответов


как только вы определяете отображение в одном направлении, вы можете использовать понимание dict для отображения его в другую сторону

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()}

затем вы можете использовать join с выражением генератора для выполнения переводов.

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))`

выход:

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