Sådan opretter du en morsekodeoversætter ved hjælp af Python

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.

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.

  • Opret en ordbog med morsekode-mønstre med engelske alfabeter, tal og tegnsætninger.
  • Gentag over teksten og tilføj morsekodemønsteret for hvert teksttegn til resultatet.
    • 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.
  • Den resulterende streng vil være den morsekode, vi havde brug for.
  • Til sidst returnerer du resultatet.
  • Prøv at skrive koden i Python. Bare rolig, selvom du ikke er i stand til at skrive det helt.

      Sådan annullerer du BET Plus-abonnement

    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.

      13 bedste værktøjer til at gendanne iPhone- og iPad-data- [Data Recovery]

    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.

  • Vend om på CHARS_TO_MORSE_CODE_MAPPING-ordbogen ved at bruge den util-funktion, vi har skrevet.
  • Gentag morsekoden og hold styr på det aktuelle morsekodekarakter.
    • 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.
  • Hvis der er det sidste tegn, skal du tilføje det til resultatet efter afkodning ved hjælp af ordbogen.
  • Returner resultatet til sidst.
  • 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.

      Reparer Disney Plus Hotstar-appen, der ikke indlæses

    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.