Morseova azbuka predstavlja sistem kodiranja poruka korišćenjem tačaka, crtica i razmaka. Njena primena je raširena, posebno u situacijama kada je potrebno preneti poruku na diskretan način.
Mnogi su se susreli sa upotrebom Morseove azbuke u filmskim scenama sa mornarima, gde se ona koristi za komunikaciju. U ovom tekstu, reč je o istom sistemu, ali sa razlikom što ćemo kreirati Python program koji će vršiti prevod između engleskog teksta i Morseove azbuke, kao i obrnuto.
O Morseovoj azbuci
Svako slovo engleskog alfabeta, broj, interpunkcijski znak i drugi karakteri imaju specifičan obrazac u Morseovoj azbuci. Nakon što se upoznate sa ovim obrascima, kodiranje i dekodiranje će postati jednostavno. Detaljnije informacije i obrasce možete pronaći na stranici o Morseovoj azbuci na Vikipediji.
U ovom vodiču, naučićemo kako da konvertujemo običan engleski tekst u Morseovu azbuku, i obrnuto. Koristićemo engleska slova, brojeve i interpunkcijske znakove u procesu kodiranja i dekodiranja. Ako želite da uključite i druge tipove karaktera, to ćete lako moći da uradite nakon što savladate osnove ovog procesa.
Važno je napomenuti da velika i mala slova imaju iste Morseove kodove. To je zbog toga što se Morseova azbuka najčešće koristi u komunikaciji gde razlika između velikih i malih slova nije bitna, kao na primer u svakodnevnim razgovorima.
Sada, pređimo na deo sa kodiranjem za kodiranje i dekodiranje.
Pretvaranje engleskog teksta u Morseovu azbuku
Algoritam za prebacivanje engleskog teksta u Morseovu azbuku je relativno jednostavan. Pogledajmo korake:
- Napravite rečnik koji mapira Morseove kodove sa engleskim slovima, brojevima i interpunkcijskim znacima.
- Prođite kroz tekst i za svaki karakter dodajte odgovarajući Morseov kod u rezultat.
- U Morseovoj azbuci, razmak se stavlja posle svakog znaka, a dvostruki razmak posle svake reči.
- Kada naiđemo na razmak u tekstu, koji odvaja reči, u rezultat treba dodati dvostruki razmak.
- Rezultirajući niz će biti traženi Morseov kod.
- Na kraju, vratite rezultat.
Pokušajte da napišete kod u Pythonu. Ne brinite ako ne uspete iz prvog pokušaja.
Pogledajmo kod koji pretvara običan engleski tekst u Morseovu azbuku.
# Rečnik koji mapira karaktere u Morseovu azbuku 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': '-----', '.': '.-.-.-', ',': '--..--', '?': '..--..', '\'': '· − − − − ·', '!': '− · − · − −', '/': '− · · − ·', '(': '− · − − ·', ')': '− · − − · −', '&': '· − · · ·', ':': '− − − · · ·', ';': '− · − · − ·', '=': '− · · · −', '+': '· − · − ·', '-': '− · · · · −', '_': '· · − − · −', '"': '· − · · − ·', '$': '· · · − · · −', '@': '· − − · − ·', } # Funkcija za kodiranje običnog engleskog teksta u Morseovu azbuku def to_morse_code(english_plain_text): morse_code="" for char in english_plain_text: # Provera da li je karakter razmak # Jedan razmak se dodaje posle svakog karaktera, a dupli razmak posle svake reči if char == ' ': morse_code += ' ' else: # Dodavanje kodiranog Morseovog znaka u rezultat morse_code += CHARS_TO_MORSE_CODE_MAPPING[char.upper()] + ' ' return morse_code morse_code = to_morse_code( 'techblog.co.rs produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.' ) print(morse_code)
Možete videti izlaz u Morseovoj azbuci ispod. Trebalo bi da dobijete sličan izlaz na svom terminalu ako niste menjali poruku.
--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.-
Bravo! Dobili smo Morseovu azbuku. Znate šta sledi.
Pre nego što pređemo na program za dekodiranje, razmislimo kako da napišemo kod za dekodiranje.
…
Trebalo je da razmislite o obrnutom rečniku CHARS_TO_MORSE_CODE_MAPPING
kao jednom od koraka. Ručno to raditi je naporno i potrebno ga je ažurirati kad god se originalno mapiranje promeni. Hajde da napišemo kod za obrnuti rečnik.
def reverse_mapping(mapping): reversed = {} for key, value in mapping.items(): reversed[value] = key return reversed
Ovim kodom jednostavno zamenjujemo ključeve i vrednosti datog rečnika. Rezultirajući rečnik će imati vrednosti kao nove ključeve, a ključeve kao nove vrednosti.
Sada imamo sve potrebne delove za dekodiranje Morseove azbuke u običan engleski tekst. Bez daljeg odlaganja, hajde da dekodiramo Morseovu azbuku.
Pretvaranje Morseove azbuke u engleski tekst
Možemo obrnuti proces kodiranja Morseovog koda da bismo dobili algoritam za dekodiranje. Pogledajmo algoritam za dekodiranje Morseove azbuke u običan engleski tekst.
- Obrnite rečnik
CHARS_TO_MORSE_CODE_MAPPING
koristeći funkciju koju smo napisali. - Iterirajte kroz Morseovu azbuku i pratite trenutni znak Morseove azbuke.
- Kada naiđemo na razmak, to znači da imamo kompletan Morseov znak za dekodiranje.
- Ako je trenutni znak Morseovog koda prazan i imamo dva uzastopna razmaka, dodajte separator reči, koji je jedan razmak u običnom engleskom tekstu.
- Ako gornji uslov nije tačan, onda preuzmite dekodirani znak iz rečnika i dodajte ga rezultatu. Resetujte trenutni znak Morseove azbuke.
- Ako nismo naišli na razmak, dodajte ga trenutnom Morseovom znaku.
- Kada naiđemo na razmak, to znači da imamo kompletan Morseov znak za dekodiranje.
- Ako postoji poslednji znak, dodajte ga rezultatu nakon dekodiranja pomoću rečnika.
- Na kraju vratite rezultat.
Pogledajmo kod za gornji algoritam.
def reverse_mapping(mapping): # Dodajte kod funkcije iz prethodnog odlomka... CHARS_TO_MORSE_CODE_MAPPING = {} # Dodajte vrednosti rečnika 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: # Provera svakog karaktera if morse_code[i] == ' ': # Provera da li je reč if len(current_char_morse_code) == 0 and morse_code[i + 1] == ' ': english_plain_text += ' ' i += 1 else: # Dodavanje dekodiranog karaktera u rezultat english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[ current_char_morse_code] current_char_morse_code="" else: # Dodavanje Morseovog karaktera u trenutni karakter current_char_morse_code += morse_code[i] i += 1 # Dodavanje poslednjeg karaktera u rezultat 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)
Dao sam Morseov kod koji se generiše iz funkcije kodiranja. Dobićemo sledeći izlaz ako pokrenemo gornji program.
TECHBLOG.CO.RS PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.
Napomena: izlaz je na engleskom velikom alfabetu jer smo koristili velika slova za mapiranje u rečniku.
Završne reči
Videli smo da je izlaz funkcije za dekodiranje napisan velikim slovima. Možete poboljšati program tako što ćete napraviti izlaz kakav je u datom trenutku, prateći mala i velika slova engleskog alfabeta. Ovo nije povezano sa Morseovom azbukom, jer i velika i mala slova imaju isti obrazac. Probajte, jer je zabavnije kodirati.
To je sve za ovaj tutorijal. Koristite programe koje smo napisali kada sledeći put naiđete na Morseovu azbuku.
Srećno kodiranje 👨💻
Takođe možete pogledati kako da napravite slučajnu lozinku u Pythonu.