Морзенский код был разработан в телекоммуникациях, чтобы кодировать буквенные символы в двоичных сигналах («длинные» и «короткие», или «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 и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.