Як створити перекладач азбуки Морзе за допомогою Python

Азбука Морзе — це метод кодування повідомлення за допомогою крапок, тире та пробілів. Він широко використовується для таємної передачі повідомлень.

Можливо, ви бачили використання азбуки Морзе в морських сценах багатьох фільмів для передачі повідомлень. Тут ми говоримо про ту саму азбуку Морзе, але єдина різниця полягає в тому, що ми збираємося написати програму на 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(
        'techukraine.net produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.'
    )
    print(morse_code)

    Нижче ви можете побачити код Морзе. Ви також повинні побачити подібний код Морзе у своєму терміналі, якщо ви не змінювали повідомлення.

    --. . . -.- ..-. .-.. .- .-. .   .--. .-. --- -.. ..- -.-. . ...   .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.--   - . -.-. .... -. --- .-.. --- --. -.--   · − · · ·   ..-. .. -. .- -. -.-. .   .- .-. - .. -.-. .-.. . ... --..--   -- .- -.- . ...   - --- --- .-.. ... --..--   .- -. -..   .- .--. .. ...   - ---   .... . .-.. .--.   -... ..- ... .. -. . ... ... . ...   .- -. -..   .--. . --- .--. .-.. .   --. .-. --- .-- .-.-.-

    Ура! ми отримали азбуку Морзе. Ви знаєте, що буде потім.

      31 чудовий додаток для iPad для дітей

    Перш ніж перейти до програми декодування, давайте трохи зупинимось і подумаємо, як написати код для його декодування.

    Вам слід було подумати про реверсування словника 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)

    Я вказав азбуку Морзе, яку генерує функція кодування. Якщо запустити наведену вище програму, ми отримаємо наступний результат.

    techukraine.net PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.

    Примітка: вихідні дані наведено у верхньому регістрі англійської мови, оскільки ми використали верхній регістр алфавіту для відображення у словнику.

      Як вручну додати гру до GeForce Experience

    Заключні слова

    Ми бачили, що вихідні дані функції декодування наведені у верхньому регістрі. Ви можете вдосконалити програму, зробивши вихід таким, яким він є в заданий час, відстежуючи нижній і верхній регістри англійського алфавіту. Це не пов’язано з азбукою Морзе, оскільки верхній і нижній регістри мають однаковий шаблон. Спробуйте, оскільки кодувати цікавіше.

    Це все для цього підручника. Використовуйте програми, які ми написали, коли наступного разу зіткнетеся з кодом Морзе.

    Щасливого кодування 👨‍💻

    Ви також можете подивитися, як створити випадковий пароль у Python.