Morsekode er en metode til at kode en besked ved hjælp af prikker, bindestreger og mellemrum. Det er meget brugt til at kommunikere beskeder i hemmelighed.
Du har måske set morsekodebrug i flådescener i mange film til at kommunikere beskeder. Vi taler om den samme morsekode her, men den eneste forskel er, at vi skal skrive et Python-program til at oversætte fra engelsk til morsekode og omvendt.
Indholdsfortegnelse
Morse kode
Morsekode har forskellige mønstre for hvert engelsk alfabet, tal, tegnsætning og ikke-latinske tegn. Når du kender morsekodemønstrene for forskellige tegn, vil det være nemt at indkode og afkode dem. Du kan henvise til Wikipedia-siden med morsekode for flere detaljer og mønstre.
I denne tutorial lærer vi, hvordan man koder almindelig engelsk tekst til morsekode og omvendt. Vi vil bruge engelske alfabeter, tal og tegnsætning, mens vi koder afkodningen. Hvis du vil tilføje flere typer tegn, kan du nemt gøre det, når du først har lært grundlaget for kodning og afkodning.
En ting at huske er, at både store og små bogstaver har det samme morsekodemønster. Dette skyldes, at morsekoden hovedsageligt bruges til kommunikation, der er ligeglad med alfabetsager som hverdagssamtaler.
Lad os komme ind på kodningsdelen for kodning og afkodning.
Engelsk til morsekode
Algoritmen til at konvertere almindelig engelsk tekst til morsekode er ligetil. Lad os tjekke algoritmen.
- Morsekode indeholder et mellemrum efter hvert tegn og et dobbelt mellemrum efter hvert ord.
- Så når vi støder på plads i teksten, som er skilletegn for ord, skal vi tilføje dobbelt mellemrum til resultatet.
Prøv at skrive koden i Python. Bare rolig, selvom du ikke er i stand til at skrive det helt.
Lad os tjekke koden for indkodning af almindelig engelsk tekst til morsekode.
# 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( 'toadmin.dk produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.' ) print(morse_code)
Du kan se morsekoden nedenfor. Du bør også se en lignende morsekode i din terminal, hvis du ikke ændrede beskeden.
--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.-
Hurra! vi har morsekoden. Du ved, hvad der kommer bagefter.
Før vi hopper ind i afkodningsprogrammet, lad os stoppe et stykke tid og tænke over, hvordan man skriver kode for at afkode den.
…
Du skulle have tænkt på at vende CHARS_TO_MORSE_CODE_MAPPING ordbogen som et af trinene. At gøre det manuelt er hektisk og skal opdateres, hver gang den oprindelige kortlægning ændres. Lad os skrive kode for at vende ordbogen om.
def reverse_mapping(mapping): reversed = {} for key, value in mapping.items(): reversed[value] = key return reversed
Vi vender bare nøgleværdi-parrene i den givne ordbog med ovenstående kode. Den resulterende ordbog vil indeholde værdier er nye nøgler og nøgler som nye værdier.
Vi har alle brikkerne til at afkode morsekoden til almindelig engelsk tekst. Lad os uden videre afkode morsekoden.
Morsekode til engelsk
Vi kan vende processen med morsekodekodning for at få afkodningsalgoritmen. Lad os se algoritmen til at afkode morsekoden til almindelig engelsk tekst.
- Hvis vi støder på et mellemrum, betyder det, at vi har et komplet morsekodetegn at afkode.
- Hvis det aktuelle morsekodetegn er tomt, og vi har to på hinanden følgende mellemrum, skal du tilføje en ordseparator, som er et enkelt mellemrum i almindelig engelsk tekst.
- Hvis ovenstående betingelse er falsk, skal du hente det afkodede tegn fra ordbogen og tilføje det til resultatet. Nulstil det aktuelle morsekodetegn.
- Hvis vi ikke stødte på plads, skal du tilføje det til den aktuelle morse-karakter.
Lad os tjekke koden for ovenstående algoritme.
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)
Jeg har givet morsekoden, der er genereret fra indkodningsfunktionen. Vi får følgende output, hvis vi kører ovenstående program.
toadmin.dk PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.
Bemærk: outputtet er i det engelske store alfabet, fordi vi har brugt det store alfabet til kortlægning i ordbogen.
Afsluttende ord
Vi har set, at outputtet af afkodningsfunktionen er med store bogstaver. Du kan forbedre programmet ved at gøre outputtet, som det er på det givne tidspunkt, ved at spore små og store bogstaver i det engelske alfabet. Dette er ikke relateret til morsekode, da både store og små bogstaver har samme mønster. Prøv det, da det er sjovere at kode.
Det var det for denne tutorial. Brug de programmer, vi har skrevet, når du støder på morsekode næste gang.
God kodning 👨💻
Du kan også se på, hvordan du opretter en tilfældig adgangskode i Python.