Szyfr Morse’a

Szyfr Morse’a polega na zapisywaniu liter, cyfr i znaków za pomocą krótkich oraz długich sygnałów. Krótki sygnał oznacza się kropką, a długi kreską. Dzięki temu zwykły tekst można zamienić na ciąg znaków złożony z kropek i kresek.

Każda litera ma swój własny układ sygnałów. Na przykład litera A to .-, litera B to -..., a litera S to .... Wyrazy zapisuje się, oddzielając od siebie kolejne litery odstępami.

Szyfr Morse’a był dawniej używany między innymi w telegrafii i łączności radiowej. W praktyce jest bardziej sposobem kodowania wiadomości niż prawdziwym szyfrem, ponieważ każdy może odczytać wiadomość, jeśli zna tabelę znaków Morse’a.

Program w Pythonie

W linijkach 1-30 znajduje się funkcja szyfr_morsea, czyli główna część programu. Funkcja otrzymuje dwa argumenty: tekst, czyli wiadomość do przetworzenia, oraz tryb, który decyduje, czy program ma szyfrować, czy deszyfrować.

W linijkach 2-8 tworzony jest słownik alfabet_morsea. Słownik został tu użyty dlatego, że kod Morse’a działa jak zestaw par: konkretna litera ma swój konkretny zapis z kropek i kresek. Na przykład litera A odpowiada zapisowi .-, a litera B zapisowi -.... Dzięki słownikowi program może szybko sprawdzić, jaki kod należy do danej litery, podobnie jakby korzystał z tabeli.

W linijce 10 tworzona jest pusta lista wynik. To do niej program będzie dopisywał kolejne zakodowane znaki albo odkodowane litery. Użycie listy jest wygodne, ponieważ na końcu można łatwo połączyć wszystkie elementy w jeden tekst.

W linijkach 12-18 program wykonuje szyfrowanie. Najpierw sprawdza, czy wybrany tryb to "szyfruj". Jeśli tak, przechodzi po kolei przez każdy znak wiadomości zamienionej na wielkie litery. Jeżeli trafi na spację, dopisuje znak /, żeby w kodzie Morse’a było wiadomo, gdzie kończy się jedno słowo, a zaczyna kolejne. Jeżeli znak jest literą znajdującą się w słowniku, program odczytuje jej kod Morse’a i dopisuje go do listy wynik.

W linijce 18 program zwraca zaszyfrowaną wiadomość. Elementy listy są łączone spacjami, ponieważ w kodzie Morse’a poszczególne litery trzeba od siebie oddzielić. Dzięki temu zapis jest czytelny, na przykład A B po zaszyfrowaniu nie zlewa się w jeden ciąg znaków.

W linijkach 20-22 tworzony jest drugi słownik odwrotny_morse. Jest on potrzebny do deszyfrowania. Pierwszy słownik działa w stronę: litera → kod Morse’a, natomiast przy deszyfrowaniu potrzebujemy odwrotnej drogi: kod Morse’a → litera. Program tworzy więc nowy słownik automatycznie na podstawie poprzedniego.

W linijkach 24-28 wykonywane jest deszyfrowanie. Program dzieli zaszyfrowaną wiadomość na fragmenty za pomocą split(), czyli rozdziela ją według spacji. Każdy fragment jest jednym znakiem Morse’a. Jeśli fragment to /, program dopisuje spację. Jeśli fragment znajduje się w słowniku odwrotny_morse, program zamienia go z powrotem na literę.

W linijce 30 funkcja zwraca gotowy odszyfrowany tekst. Tym razem elementy listy są łączone bez dodatkowych spacji, ponieważ po odczytaniu kodu Morse’a chcemy otrzymać zwykłe słowo lub zdanie.

Po zakończeniu funkcji zaczyna się część programu, w której korzystamy z tej funkcji. W linijce 32 tworzona jest zmienna tajemna_wiadomosc, w której zapisano tekst "TAJNY KOD".

W linijkach 34-35 program wywołuje funkcję szyfr_morsea w trybie "szyfruj". Wiadomość zostaje zamieniona na kod Morse’a, zapisana w zmiennej zaszyfrowana, a następnie wypisana na ekranie.

W linijkach 37-38 ta sama funkcja zostaje wywołana ponownie, ale tym razem w trybie "deszyfruj". Program bierze wcześniej zaszyfrowany tekst, zamienia kropki i kreski z powrotem na litery, zapisuje wynik w zmiennej odszyfrowana i wypisuje go na ekranie.

  1. def szyfr_morsea(tekst, tryb):
  2. alfabet_morsea = {
  3. "A": ".-", "B": "-...", "C": "-.-.", "D": "-..", "E": ".",
  4. "F": "..-.", "G": "--.", "H": "....", "I": "..", "J": ".---",
  5. "K": "-.-", "L": ".-..", "M": "--", "N": "-.", "O": "---",
  6. "P": ".--.", "Q": "--.-", "R": ".-.", "S": "...", "T": "-",
  7. "U": "..-", "V": "...-", "W": ".--", "X": "-..-", "Y": "-.--", "Z": "--.."
  8. }
  9. wynik = []
  10. if tryb == "szyfruj":
  11. for znak in tekst.upper():
  12. if znak == " ":
  13. wynik.append("/")
  14. elif znak in alfabet_morsea:
  15. wynik.append(alfabet_morsea[znak])
  16. return " ".join(wynik)
  17. odwrotny_morse = {}
  18. for litera in alfabet_morsea:
  19. odwrotny_morse[alfabet_morsea[litera]] = litera
  20. for kod in tekst.split():
  21. if kod == "/":
  22. wynik.append(" ")
  23. elif kod in odwrotny_morse:
  24. wynik.append(odwrotny_morse[kod])
  25. return "".join(wynik)
  26. tajemna_wiadomosc = "TAJNY KOD"
  27. zaszyfrowana = szyfr_morsea(tajemna_wiadomosc, "szyfruj")
  28. print("Zaszyfrowana wiadomość:", zaszyfrowana)
  29. odszyfrowana = szyfr_morsea(zaszyfrowana, "deszyfruj")
  30. print("Odszyfrowana wiadomość:", odszyfrowana)

Szyfr Morse’a – narzędzie

Szyfruj Tryb
0 Znaki
0 Elementy kodu

Wiadomość

0 znaków

Wynik

0 znaków

Przewijanie do góry