Kod Morse’a to metoda kodowania wiadomości za pomocą kropek, myślników i spacji. Jest szeroko stosowany do tajnego przekazywania wiadomości.
Być może widziałeś użycie kodu Morse’a w scenach marynarki wojennej wielu filmów do przekazywania wiadomości. Mówimy tutaj o tym samym kodzie Morse’a, ale jedyną różnicą jest to, że napiszemy program w Pythonie do tłumaczenia z angielskiego na alfabet Morse’a i odwrotnie.
Spis treści:
Kod Morse’a
Alfabet Morse’a ma różne wzorce dla każdego alfabetu angielskiego, liczby, interpunkcji i znaków innych niż łacińskie. Znając wzorce alfabetu Morse’a dla różnych znaków, łatwo będzie je zakodować i zdekodować. Możesz odwołać się do strony Wikipedii z kodem Morse’a, aby uzyskać więcej szczegółów i wzorów.
W tym samouczku dowiemy się, jak zakodować zwykły tekst w języku angielskim na kod Morse’a i na odwrót. Podczas kodowania będziemy używać angielskich alfabetów, cyfr i interpunkcji. Jeśli chcesz dodać więcej typów znaków, możesz to łatwo zrobić, gdy poznasz podstawy kodowania i dekodowania.
Jedną rzeczą do zapamiętania jest to, że zarówno wielkie, jak i małe litery mają ten sam wzór kodu Morse’a. Dzieje się tak dlatego, że alfabet Morse’a jest używany głównie do komunikacji, która nie dba o przypadki alfabetu, takie jak codzienne rozmowy.
Przejdźmy do części kodowania dotyczącej kodowania i dekodowania.
z angielskiego na alfabet Morse’a
Algorytm konwersji zwykłego tekstu angielskiego na kod Morse’a jest prosty. Sprawdźmy algorytm.
- Kod Morse’a zawiera spację po każdym znaku i podwójną spację po każdym słowie.
- Kiedy więc napotkamy w tekście spację, która jest separatorem słów, musimy dodać do wyniku podwójną spację.
Spróbuj napisać kod w Pythonie. Nie martw się, nawet jeśli nie jesteś w stanie napisać tego w całości.
Sprawdźmy kod do kodowania zwykłego tekstu angielskiego na kod Morse’a.
# 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( 'newsblog.pl produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.' ) print(morse_code)
Poniżej możesz zobaczyć wynik kodu Morse’a. Powinieneś również zobaczyć podobny kod Morse’a w swoim terminalu, jeśli nie zmieniłeś wiadomości.
--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.-
Hurra! mamy kod Morse’a. Wiesz, co nastąpi później.
Zanim przejdziemy do programu dekodującego, zatrzymajmy się na chwilę i zastanówmy, jak napisać kod, który go zdekoduje.
…
Powinieneś pomyśleć o odwróceniu słownika CHARS_TO_MORSE_CODE_MAPPING jako jednym z kroków. Robienie tego ręcznie jest gorączkowe i wymaga aktualizacji po każdej zmianie oryginalnego mapowania. Napiszmy kod odwracający słownik.
def reverse_mapping(mapping): reversed = {} for key, value in mapping.items(): reversed[value] = key return reversed
Po prostu odwracamy pary klucz-wartość danego słownika za pomocą powyższego kodu. Wynikowy słownik będzie zawierał wartości to nowe klucze i klucze jako nowe wartości.
Mamy wszystkie elementy do rozszyfrowania kodu Morse’a na zwykły tekst w języku angielskim. Bez dalszych ceregieli odszyfrujmy kod Morse’a.
Alfabet Morse’a na angielski
Możemy odwrócić proces kodowania Morse’a, aby uzyskać algorytm dekodowania. Zobaczmy algorytm dekodowania kodu Morse’a na zwykły tekst w języku angielskim.
- Jeśli natkniemy się na spację, oznacza to, że mamy do rozszyfrowania cały znak alfabetu Morse’a.
- Jeśli bieżący znak kodu Morse’a jest pusty i mamy dwie kolejne spacje, dodaj separator słowa, który jest pojedynczą spacją w zwykłym tekście angielskim.
- Jeśli powyższy warunek jest fałszywy, pobierz zdekodowany znak ze słownika i dodaj go do wyniku. Zresetuj bieżący znak alfabetu Morse’a.
- Jeśli nie natknęliśmy się na spację, dodaj ją do aktualnego znaku Morse’a.
Sprawdźmy kod dla powyższego algorytmu.
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)
Podałem kod Morse’a, który jest generowany z funkcji kodowania. Jeśli uruchomimy powyższy program, otrzymamy następujące dane wyjściowe.
newsblog.pl PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.
Uwaga: dane wyjściowe są w alfabecie angielskim wielkimi literami, ponieważ użyliśmy wielkich liter do mapowania w słowniku.
Ostatnie słowa
Widzieliśmy, że dane wyjściowe funkcji dekodowania są pisane wielkimi literami. Możesz ulepszyć program, zmieniając dane wyjściowe tak, jak są w danym czasie, śledząc małe i duże litery alfabetu angielskiego. Nie jest to związane z alfabetem Morse’a, ponieważ zarówno duże, jak i małe litery mają ten sam wzorzec. Wypróbuj, ponieważ kodowanie jest przyjemniejsze.
To wszystko w tym samouczku. Użyj programów, które napisaliśmy, gdy następnym razem napotkasz kod Morse’a.
Szczęśliwego kodowania 👨💻
Możesz również przyjrzeć się, jak utworzyć losowe hasło w Pythonie.