Python을 사용하여 모스 부호 변환기를 만드는 방법

모스 부호는 점, 대시 및 공백을 사용하여 메시지를 인코딩하는 방법입니다. 비밀리에 메시지를 전달하는 데 널리 사용됩니다.

많은 영화의 해군 장면에서 메시지를 전달하기 위해 모스 부호가 사용되는 것을 보았을 것입니다. 여기서 우리는 동일한 모스 부호에 대해 이야기하고 있지만 유일한 차이점은 영어에서 모스 부호로 또는 그 반대로 번역하는 Python 프로그램을 작성한다는 것입니다.

모스 식 부호

모스 부호는 각 영어 알파벳, 숫자, 구두점 및 비라틴 문자에 대해 다른 패턴을 가지고 있습니다. 다른 문자에 대한 모스 부호 패턴을 알면 인코딩 및 디코딩하기가 쉽습니다. 자세한 내용과 패턴은 모스 부호의 Wikipedia 페이지를 참조할 수 있습니다.

이 튜토리얼에서는 일반 영어 텍스트를 모스 부호로 또는 그 반대로 인코딩하는 방법을 배웁니다. 디코딩을 인코딩하는 동안 영어 알파벳, 숫자 및 구두점을 사용합니다. 더 많은 종류의 문자를 추가하고 싶다면 인코딩과 디코딩의 기초를 배우면 쉽게 할 수 있습니다.

한 가지 기억해야 할 것은 대문자와 소문자 알파벳 모두 동일한 모스 부호 패턴을 가지고 있다는 것입니다. 모스 부호는 일상 대화와 같이 알파벳 대소문자를 신경 쓰지 않는 통신에 주로 사용되기 때문입니다.

인코딩 및 디코딩을 위한 코딩 부분으로 들어가 보겠습니다.

영어를 모스 부호로

일반 영어 텍스트를 모스 부호로 변환하는 알고리즘은 간단합니다. 알고리즘을 확인해보자.

  • 영어 알파벳, 숫자 및 구두점이 있는 모스 부호 패턴 매핑으로 사전을 만듭니다.
  • 텍스트를 반복하고 각 텍스트 문자의 모스 부호 패턴을 결과에 추가합니다.
    • 모스 부호는 각 문자 뒤에 공백을 포함하고 각 단어 뒤에 이중 공백을 포함합니다.
    • 따라서 단어의 구분 기호인 텍스트에서 공백을 만나면 결과에 이중 공백을 추가해야 합니다.
  • 결과 문자열은 우리가 필요로 하는 모스 부호가 됩니다.
  • 마지막으로 결과를 반환합니다.
  • 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(
        'koreantech.org produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.'
    )
    print(morse_code)

    아래에서 모스 부호 출력을 볼 수 있습니다. 메시지를 변경하지 않은 경우에도 터미널에 유사한 모스 부호가 표시되어야 합니다.

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

    만세! 우리는 모스 부호를 얻었습니다. 당신은 다음에 오는 것을 알고 있습니다.

      공동작업자에게 표시되는 내용을 변경하지 않고 Google 스프레드시트 데이터 필터링

    디코딩 프로그램에 뛰어들기 전에 잠시 멈추고 디코딩을 위한 코드를 작성하는 방법에 대해 생각해보자.

    단계 중 하나로 CHARS_TO_MORSE_CODE_MAPPING 사전을 뒤집는 것에 대해 생각했어야 합니다. 수동으로 수행하는 것은 바쁘고 원래 매핑이 변경될 때마다 업데이트해야 합니다. 사전을 뒤집는 코드를 작성해 봅시다.

    def reverse_mapping(mapping):
        reversed = {}
        for key, value in mapping.items():
            reversed[value] = key
        return reversed

    주어진 사전의 키-값 쌍을 위의 코드로 뒤집을 뿐입니다. 결과 사전에는 값이 새 키이고 새 값으로 키가 포함됩니다.

    우리는 모스 부호를 일반 영어 텍스트로 해독하는 모든 조각을 가지고 있습니다. 더 이상 고민하지 않고 모스 부호를 해독해 보겠습니다.

    모스 부호를 영어로

    디코딩 알고리즘을 얻기 위해 모스 부호 인코딩 프로세스를 역전시킬 수 있습니다. 모스 부호를 일반 영어 텍스트로 디코딩하는 알고리즘을 살펴보겠습니다.

  • 우리가 작성한 util 함수를 사용하여 CHARS_TO_MORSE_CODE_MAPPING 사전을 뒤집습니다.
  • 모스 부호를 반복하고 현재 모스 부호 문자를 추적합니다.
    • 공백이 발생하면 디코딩할 완전한 모스 부호 문자가 있음을 의미합니다.
      • 현재 모스 부호 문자가 비어 있고 두 개의 연속적인 공백이 있는 경우 일반 영어 텍스트에서 단일 공백인 단어 구분자를 추가합니다.
      • 위의 조건이 거짓이면 사전에서 디코딩된 문자를 가져와 결과에 추가합니다. 현재 모스 부호 문자를 재설정합니다.
    • 공백이 없으면 현재 모스 문자에 추가하십시오.
  • 마지막 문자가 있으면 사전을 이용하여 복호화한 후 결과에 추가한다.
  • 끝에 결과를 반환합니다.
  • 위의 알고리즘에 대한 코드를 확인해보자.

    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)

    인코딩 함수에서 생성된 모스 부호를 제공했습니다. 위의 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.

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

    참고: 사전에서 매핑에 대문자 알파벳을 사용했기 때문에 출력은 영어 대문자 알파벳으로 표시됩니다.

      iPhone에서 날씨 앱이 업데이트되지 않는 문제를 해결하는 방법

    마지막 단어

    우리는 디코딩 함수의 출력이 대문자임을 보았습니다. 영어 알파벳의 대소문자를 추적하여 주어진 시간에 있는 그대로 출력하여 프로그램을 개선할 수 있습니다. 대문자와 소문자 모두 같은 패턴을 가지므로 이것은 모스 부호와 관련이 없습니다. 코딩하는 것이 더 재미있으니 시도해 보세요.

    이것이 이 튜토리얼의 내용입니다. 다음에 모스 부호를 만날 때 우리가 작성한 프로그램을 사용하십시오.

    해피코딩 👨‍💻

    Python에서 임의의 암호를 만드는 방법을 살펴볼 수도 있습니다.