Как правильно закодировать символы точка и тире в символы 0 и 1 для строки в азбуке Морзе

При передаче кода Морзе международный стандарт указывает, что: Википедия:

Код Морзе может быть представлен как двоичный код, и это то, что телеграфисты делают при передаче сообщений. Исходя из приведенного выше определения ITU и дополнительно определяя бит как точку времени, последовательность кода Морзе может быть создана из комбинации следующих пяти битовых строк: точка или "DIT" ( ▄ ): 1 тирe или "ДASH" ( ▄▄▄ ): 111 внутрисимвольный пробел (между точками и тире внутри символа): 0 короткий промежуток (между буквами): 000 средний пробел (между словами): 0000000

Обратите внимание, что метки и пробелы чередуются: точки и тире всегда разделяются одним из пробелов, а пробелы всегда разделяются точкой или тире.

И ещё

Предполагается, что получение сообщения выполняется автоматически аппаратным обеспечением, которое периодически проверяет линию, и если линия подключена (кнопка на удаленной станции не работает), записывается 1, а если линия не подключена (удаленная клавиша вверх), записывается 0

Вот стандартная строка

string = "HEY JUDE"

Вот её представление в виде точек и тире

string = '···· · −·−−   ·−−− ··− −·· ·'

Нужно её закодировать в виде 0 и 1

Вот моё решение

Я думаю что оно не правильное, т.к. я не учитываю

  1. (кнопка на удаленной станции не работает), записывается 1, а если линия не подключена (удаленная клавиша вверх), записывается 0. Я не понимаю как это выглядит --- т.е сначала в результирующей строке будет идти 1 если станция включена и 0 если нет

  2. Нужно ли ставить внутрисимвольный пробел === в конце символа внутрисимвольный пробел (между точками и тире внутри символа): 0

    если у нас символ 'H' вот так .... 4 точки то это 10101010 или же без последнего 0 вот так 1010101 ---- нужен ли 0 или нет Ведь потом всегда будет идти короткий промежуток (между буквами): 000 Если поставить 0 то получится 10101010000. Если не поставить то 1010101000. Как это будет учитываться при раскодирование

  3. То же самый 0 будет в конце символа , а далее идёт пробел между словами из 7 нулей. Т.е будет 0 + 7 нулей или же просто 7 нулей

  4. Нужен правильный словарь перевода в 0 и 1

bit_morse = {'.': '1', '-': '111', }

def encode_string_bits(string):
    string = string.replace('    ', '!') # Заменим тройной пробел на любой символ временно
    st = []
    string = list(string)
    for symbol in string:
        if symbol in bit_morse:
            st.append(bit_morse[symbol] + '0')
        elif symbol == ' ':
            st.append('000')
        elif symbol == '!':
            st.append('0000000')
    # Уберём с конца строки простой пробел из 3 нулей
    return ''.join(st)[:-3]

Вот какую строку вернула мне функция

101010100001000011101011101110000000010111011101110000101011100001110101000010

А должна быть вот такая

'1100110011001100000011000000111111001100111111001111110000000000000011001111110011111100111111000000110011001111110000001111110011001100000011', 'HEY JUDE')

Пожалуйста если можно ,объясните популярно на конкретном примере! Буду всем благодарен.


Ответы (0 шт):