Как создать переводчик азбуки Морзе с помощью Python
Опубликовано: 2022-10-19Азбука Морзе — это метод кодирования сообщения с использованием точек , тире и пробелов . Он широко используется для тайной передачи сообщений.
Возможно, вы видели использование азбуки Морзе в морских сценах многих фильмов для передачи сообщений. Здесь мы говорим об одной и той же азбуке Морзе, но с той лишь разницей, что мы собираемся написать программу на Python для перевода с английского на азбуку Морзе и наоборот.
азбука Морзе
Код Морзе имеет разные шаблоны для каждого английского алфавита, цифр, знаков препинания и нелатинских символов. Как только вы узнаете шаблоны азбуки Морзе для разных символов, вам будет легко их кодировать и декодировать. Вы можете обратиться к странице азбуки Морзе в Википедии для получения более подробной информации и шаблонов.

В этом уроке мы узнаем, как кодировать простой английский текст в азбуку Морзе и наоборот. Мы будем использовать английский алфавит, цифры и знаки препинания при кодировании декодирования. Если вы хотите добавить больше типов символов, вы легко сможете это сделать, как только изучите основы кодирования и декодирования.
Следует помнить, что как прописные, так и строчные буквы имеют один и тот же шаблон азбуки Морзе. Это связано с тем, что азбука Морзе в основном используется для общения, которое не заботится о регистрах алфавита, таких как повседневные разговоры.
Давайте перейдем к части кодирования для кодирования и декодирования.
С английского на азбуку Морзе
Алгоритм преобразования простого английского текста в азбуку Морзе прост. Проверим алгоритм.
- Создайте словарь с сопоставлениями шаблонов азбуки Морзе с английскими алфавитами, цифрами и пунктуацией.
- Переберите текст и добавьте к результату шаблон азбуки Морзе каждого текстового символа.
- Азбука Морзе содержит пробел после каждого символа и двойной пробел после каждого слова.
- Поэтому, когда мы сталкиваемся с пробелом в тексте, который является разделителем слов, нам нужно добавить к результату двойной пробел.
- Результирующая строка будет азбукой Морзе, которая нам нужна.
- Наконец, верните результат.
Попробуйте написать код на Python. Не волнуйтесь, даже если вы не в состоянии написать его полностью.
Давайте проверим код для кодирования простого английского текста в азбуку Морзе.
# dictionary for mapping characters to morse code CHARS_TO_MORSE_CODE_MAPPING = { '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': '-----', '.': '.-.-.-', ',': '--..--', '?': '..--..', '\'': '· − − − − ·', '!': '− · − · − −', '/': '− · · − ·', '(': '− · − − ·', ')': '− · − − · −', '&': '· − · · ·', ':': '− − − · · ·', ';': '− · − · − ·', '=': '− · · · −', '+': '· − · − ·', '-': '− · · · · −', '_': '· · − − · −', '"': '· − · · − ·', '$': '· · · − · · −', '@': '· − − · − ·', } # function to encode plain English text to morse code def to_morse_code(english_plain_text): morse_code = '' for char in english_plain_text: # checking for space # to add single space after every character and double space after every word if char == ' ': morse_code += ' ' else: # adding encoded morse code to the result morse_code += CHARS_TO_MORSE_CODE_MAPPING[char.upper()] + ' ' return morse_code morse_code = to_morse_code( 'Geekflare produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.' ) print(morse_code)Вы можете увидеть вывод азбуки Морзе ниже. Вы также должны увидеть аналогичную азбуку Морзе в своем терминале, если вы не изменили сообщение.
--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.-Ура! мы получили азбуку Морзе. Вы знаете, что будет после.

Прежде чем перейти к программе декодирования, давайте ненадолго остановимся и подумаем, как написать код для ее декодирования.
…
Вы должны были подумать об обращении словаря CHARS_TO_MORSE_CODE_MAPPING в качестве одного из шагов. Выполнение этого вручную является беспокойным и требует обновления всякий раз, когда исходное сопоставление изменяется. Давайте напишем код для реверсирования словаря.
def reverse_mapping(mapping): reversed = {} for key, value in mapping.items(): reversed[value] = key return reversedМы просто меняем местами пары ключ-значение данного словаря с помощью приведенного выше кода. Результирующий словарь будет содержать значения как новые ключи и ключи как новые значения.
У нас есть все необходимое для декодирования азбуки Морзе в обычный текст на английском языке. Без лишних слов давайте расшифруем азбуку Морзе.
Азбука Морзе на английский
Мы можем обратить процесс кодирования азбуки Морзе, чтобы получить алгоритм декодирования. Давайте посмотрим на алгоритм расшифровки азбуки Морзе в обычный английский текст.
- Переверните словарь
CHARS_TO_MORSE_CODE_MAPPING, используя написанную нами функцию util. - Перебирайте азбуку Морзе и отслеживайте текущий символ азбуки Морзе.
- Если мы встречаем пробел, это означает, что у нас есть полный символ азбуки Морзе для декодирования.
- Если текущий символ азбуки Морзе пуст и у нас есть два последовательных пробела, добавьте разделитель слов, который представляет собой один пробел в обычном английском тексте.
- Если вышеуказанное условие ложно, то получить декодированный символ из словаря и добавить его в результат. Сброс текущего символа азбуки Морзе.
- Если мы не встретили пробел, добавьте его к текущему азбуке Морзе.
- Если мы встречаем пробел, это означает, что у нас есть полный символ азбуки Морзе для декодирования.
- Если есть последний символ, добавить его в результат после декодирования по словарю.
- Верните результат в конце.
Давайте проверим код для вышеуказанного алгоритма.
def reverse_mapping(mapping): # add function code from the previous snippet... CHARS_TO_MORSE_CODE_MAPPING = {} # add dictionary values MORSE_CODE_TO_CHARS_MAPPING = reverse_mapping(CHARS_TO_MORSE_CODE_MAPPING) def to_english_plain_text(morse_code): english_plain_text = '' current_char_morse_code = '' i = 0 while i < len(morse_code) - 1: # checking for each character if morse_code[i] == ' ': # checking for word if len(current_char_morse_code) == 0 and morse_code[i + 1] == ' ': english_plain_text += ' ' i += 1 else: # adding decoded character to the result english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[ current_char_morse_code] current_char_morse_code = '' else: # adding morse code char to the current character current_char_morse_code += morse_code[i] i += 1 # adding last character to the result if len(current_char_morse_code) > 0: english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[ current_char_morse_code] return english_plain_text english_plain_text = to_english_plain_text( '--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.- ' ) print(english_plain_text)Я дал азбуку Морзе, сгенерированную функцией кодирования. Мы получим следующий вывод, если запустим вышеуказанную программу.
GEEKFLARE PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.Примечание: выходные данные представлены в английском верхнем регистре, потому что мы использовали верхний регистр для отображения в словаре.
Заключительные слова
Мы видели, что вывод функции декодирования в верхнем регистре. Вы можете улучшить программу, сделав вывод как есть в заданное время, отслеживая строчные и прописные буквы английского алфавита. Это не связано с азбукой Морзе, так как верхний и нижний регистры имеют одинаковую структуру. Попробуйте, кодить веселее.
Вот и все для этого урока. Используйте написанные нами программы, когда в следующий раз столкнетесь с азбукой Морзе.
Счастливое кодирование
Вы также можете посмотреть, как создать случайный пароль в Python.
