Рубрики
Без рубрики

Простой переводчик Python Morse Code

Морзенский код был разработан в телекоммуникациях, чтобы кодировать буквенные символы в двоичных сигналах («длинные» и «короткие», или «1» и «0»). Вот таблица Morse Code: каждый символ отображается с его представлением Morse Code. В этом руководстве показано вам, как реализовать простой переводчик Morse Code в Python. Вы также можете играть в объяснение … Простой переводчик Morse Python Morse Reverator Подробнее »

Автор оригинала: Chris.

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