Как правильно закодировать символы точка и тире в символы 0 и 1 для строки в азбуке Морзе
При передаче кода Морзе международный стандарт указывает, что: Википедия:
Код Морзе может быть представлен как двоичный код, и это то, что телеграфисты делают при передаче сообщений. Исходя из приведенного выше определения ITU и дополнительно определяя бит как точку времени, последовательность кода Морзе может быть создана из комбинации следующих пяти битовых строк: точка или "DIT" ( ▄ ): 1 тирe или "ДASH" ( ▄▄▄ ): 111 внутрисимвольный пробел (между точками и тире внутри символа): 0 короткий промежуток (между буквами): 000 средний пробел (между словами): 0000000
Обратите внимание, что метки и пробелы чередуются: точки и тире всегда разделяются одним из пробелов, а пробелы всегда разделяются точкой или тире.
И ещё
Предполагается, что получение сообщения выполняется автоматически аппаратным обеспечением, которое периодически проверяет линию, и если линия подключена (кнопка на удаленной станции не работает), записывается 1, а если линия не подключена (удаленная клавиша вверх), записывается 0
Вот стандартная строка
string = "HEY JUDE"
Вот её представление в виде точек и тире
string = '···· · −·−− ·−−− ··− −·· ·'
Нужно её закодировать в виде 0 и 1
Вот моё решение
Я думаю что оно не правильное, т.к. я не учитываю
(кнопка на удаленной станции не работает), записывается 1, а если линия не подключена (удаленная клавиша вверх), записывается 0. Я не понимаю как это выглядит --- т.е сначала в результирующей строке будет идти 1 если станция включена и 0 если нет
Нужно ли ставить внутрисимвольный пробел === в конце символа внутрисимвольный пробел (между точками и тире внутри символа): 0
если у нас символ 'H' вот так .... 4 точки то это 10101010 или же без последнего 0 вот так 1010101 ---- нужен ли 0 или нет Ведь потом всегда будет идти короткий промежуток (между буквами): 000 Если поставить 0 то получится 10101010000. Если не поставить то 1010101000. Как это будет учитываться при раскодирование
То же самый 0 будет в конце символа , а далее идёт пробел между словами из 7 нулей. Т.е будет 0 + 7 нулей или же просто 7 нулей
Нужен правильный словарь перевода в 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')
Пожалуйста если можно ,объясните популярно на конкретном примере! Буду всем благодарен.