Jak stworzyć tłumacz alfabetu Morse'a za pomocą Pythona

Opublikowany: 2022-10-19

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.

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.

Kod Morse'a

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.

  1. Utwórz słownik z mapowaniem wzorców alfabetu Morse'a z angielskimi alfabetami, cyframi i znakami interpunkcyjnymi.
  2. Wykonaj iterację tekstu i dodaj do wyniku wzorzec kodu Morse'a każdego znaku tekstowego.
    • 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ę.
  3. Wynikowy ciąg będzie kodem Morse'a, którego potrzebowaliśmy.
  4. Na koniec zwróć wynik.

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( 'Geekflare 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.

  1. Odwróć słownik CHARS_TO_MORSE_CODE_MAPPING za pomocą funkcji util, którą napisaliśmy.
  2. Iteruj po kodzie Morse'a i śledź bieżący znak alfabetu Morse'a.
    • 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.
  3. Jeśli istnieje ostatni znak, dodaj go do wyniku po zdekodowaniu za pomocą słownika.
  4. Zwróć wynik na końcu.

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.

 GEEKFLARE 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.