모스 부호는 점, 대시 및 공백을 사용하여 메시지를 인코딩하는 방법입니다. 비밀리에 메시지를 전달하는 데 널리 사용됩니다.
많은 영화의 해군 장면에서 메시지를 전달하기 위해 모스 부호가 사용되는 것을 보았을 것입니다. 여기서 우리는 동일한 모스 부호에 대해 이야기하고 있지만 유일한 차이점은 영어에서 모스 부호로 또는 그 반대로 번역하는 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)
아래에서 모스 부호 출력을 볼 수 있습니다. 메시지를 변경하지 않은 경우에도 터미널에 유사한 모스 부호가 표시되어야 합니다.
--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.-
만세! 우리는 모스 부호를 얻었습니다. 당신은 다음에 오는 것을 알고 있습니다.
디코딩 프로그램에 뛰어들기 전에 잠시 멈추고 디코딩을 위한 코드를 작성하는 방법에 대해 생각해보자.
…
단계 중 하나로 CHARS_TO_MORSE_CODE_MAPPING 사전을 뒤집는 것에 대해 생각했어야 합니다. 수동으로 수행하는 것은 바쁘고 원래 매핑이 변경될 때마다 업데이트해야 합니다. 사전을 뒤집는 코드를 작성해 봅시다.
def reverse_mapping(mapping): reversed = {} for key, value in mapping.items(): reversed[value] = key return reversed
주어진 사전의 키-값 쌍을 위의 코드로 뒤집을 뿐입니다. 결과 사전에는 값이 새 키이고 새 값으로 키가 포함됩니다.
우리는 모스 부호를 일반 영어 텍스트로 해독하는 모든 조각을 가지고 있습니다. 더 이상 고민하지 않고 모스 부호를 해독해 보겠습니다.
모스 부호를 영어로
디코딩 알고리즘을 얻기 위해 모스 부호 인코딩 프로세스를 역전시킬 수 있습니다. 모스 부호를 일반 영어 텍스트로 디코딩하는 알고리즘을 살펴보겠습니다.
- 공백이 발생하면 디코딩할 완전한 모스 부호 문자가 있음을 의미합니다.
- 현재 모스 부호 문자가 비어 있고 두 개의 연속적인 공백이 있는 경우 일반 영어 텍스트에서 단일 공백인 단어 구분자를 추가합니다.
- 위의 조건이 거짓이면 사전에서 디코딩된 문자를 가져와 결과에 추가합니다. 현재 모스 부호 문자를 재설정합니다.
- 공백이 없으면 현재 모스 문자에 추가하십시오.
위의 알고리즘에 대한 코드를 확인해보자.
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.
참고: 사전에서 매핑에 대문자 알파벳을 사용했기 때문에 출력은 영어 대문자 알파벳으로 표시됩니다.
마지막 단어
우리는 디코딩 함수의 출력이 대문자임을 보았습니다. 영어 알파벳의 대소문자를 추적하여 주어진 시간에 있는 그대로 출력하여 프로그램을 개선할 수 있습니다. 대문자와 소문자 모두 같은 패턴을 가지므로 이것은 모스 부호와 관련이 없습니다. 코딩하는 것이 더 재미있으니 시도해 보세요.
이것이 이 튜토리얼의 내용입니다. 다음에 모스 부호를 만날 때 우리가 작성한 프로그램을 사용하십시오.
해피코딩 👨💻
Python에서 임의의 암호를 만드는 방법을 살펴볼 수도 있습니다.