Морзенский код был разработан в телекоммуникациях, чтобы кодировать буквенные символы в двоичных сигналах («длинные» и «короткие», или «1» и «0»).
Вот таблица кода Морзе:
В этом руководстве показано вам, как реализовать простой переводчик Morse Code в Python.
Вы также можете играть в видео объяснения, когда вы прочитали статью:
Код вносят вклад Студент Finxter Альбрехт Отказ
Цель : Учитывая строку, которая является либо кодом MORSE, либо нормальный текст. Напишите функцию, которая преобразует строку на другой язык: MORSE код должен быть переведен на нормальный текст. Нормальный текст должен быть переведен в код Морзе.
Пример вывода : Создайте функцию Морс (TXT)
который принимает входную строку аргумента TXT
и возвращает свой перевод:
>>> morse('python') '.--. -.-- - .... --- -.' >>> morse('.--. -.-- - .... --- -.') 'PYTHON' >>> morse(morse('HEY')) 'HEY'
Обратите внимание, что код Morse не различает строчные или прописные буквы. Таким образом, вы просто используете прописные буквы в качестве вывода перевода по умолчанию.
Алгоритм Идея : Достаточно простой алгоритм, чтобы решить проблему:
- Обнаружить, является ли строка MORSE код или нормальный текст. Простое, но не идеальное решение – проверять, является ли первый символ либо символом DOT
'.'
или минус символ'-'
Отказ Обратите внимание, что вы можете легко расширить это, проверив, если все символы либо символом DOT, либо символом минус (простое регулярное выражение будет достаточно). - Подготовьте словарь, который отображает все символы «нормального текста» к их соответствующим переводам Морзе. Используйте обратный словарь (или создайте его Ad-Hoc), чтобы получить обратное отображение.
- Итайте для всех символов в строке и используйте словарь для перевода каждого персонажа в отдельности.
Реализация : Вот реализация Python вышеуказанного алгоритма для перевода Morse Code:
def morse(txt): '''Morse code encryption and decryption''' d = {'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':'--..', ' ':'.....'} translation = '' # Encrypt Morsecode if txt.startswith('.') or txt.startswith('−'): # Swap key/values in d: d_encrypt = dict([(v, k) for k, v in d.items()]) # Morse code is separated by empty space chars txt = txt.split(' ') for x in txt: translation += d_encrypt.get(x) # Decrypt to Morsecode: else: txt = txt.upper() for x in txt: translation += d.get(x) + ' ' return translation.strip() print(morse('python')) # .--. -.-- - .... --- -. print(morse('.--. -.-- - .... --- -.')) # PYTHON print(morse(morse('HEY'))) # HEY
Алгоритмическая сложность : Сложность выполнения является линейной в длине входной строки, которая будет переведена – одна операция перевода на символ. Словарь членство имеет постоянную сложность времени выполнения. Настройка памяти также является линейным в входном тексте, так как все символы должны быть удержаны в памяти.
Альтернатива Реализация : Albrecht также предложил гораздо более короткую альтернативу:
def morse(txt): encrypt = {'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':'--..', ' ':'.....'} decrypt = {v: k for k, v in encrypt.items()} if '-' in txt: return ''.join(decrypt[i] for i in txt.split()) return ' '.join(encrypt[i] for i in txt.upper()) print(morse('python')) # .--. -.-- - .... --- -. print(morse('.--. -.-- - .... --- -.')) # PYTHON print(morse(morse('HEY'))) # HEY
Он использует определение процессов и генератора, чтобы сделать его гораздо более лаконичным.
Связанная статья: Python Regex SuperPower – Ultimate Guide
Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.
Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.
Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.