Hvordan lage en morsekodeoversetter ved hjelp av Python

Morsekode er en metode for å kode en melding ved hjelp av prikker, bindestreker og mellomrom. Det er mye brukt til å kommunisere meldinger i hemmelighet.

Du har kanskje sett morsekodebruk i marinescener i mange filmer for å kommunisere meldinger. Vi snakker om den samme morsekoden her, men den eneste forskjellen er at vi skal skrive et Python-program for å oversette fra engelsk til morsekode og omvendt.

Morse kode

Morsekode har forskjellige mønstre for hvert engelsk alfabet, tall, tegnsetting og ikke-latinske tegn. Når du kjenner morsekodemønstrene for forskjellige tegn, vil det være enkelt å kode og dekode dem. Du kan henvise til Wikipedia-siden med morsekode for flere detaljer og mønstre.

I denne opplæringen lærer vi hvordan du koder ren engelsk tekst til morsekode og omvendt. Vi vil bruke engelske alfabeter, tall og tegnsetting mens vi koder dekodingen. Hvis du vil legge til flere typer tegn, kan du enkelt gjøre det når du først har lært basen for koding og dekoding.

En ting å huske er at både store og små bokstaver har samme morsekodemønster. Dette er fordi morsekoden hovedsakelig brukes til kommunikasjon som ikke bryr seg om alfabetsaker som hverdagssamtaler.

La oss komme inn på kodingsdelen for koding og dekoding.

Engelsk til morsekode

Algoritmen for å konvertere ren engelsk tekst til morsekode er enkel. La oss sjekke algoritmen.

  • Lag en ordbok med morsekodemønstertilordningene med engelske alfabeter, tall og tegnsettinger.
  • Iterer over teksten og legg til morsekodemønsteret til hvert teksttegn til resultatet.
    • Morsekode inneholder et mellomrom etter hvert tegn og et dobbeltrom etter hvert ord.
    • Så når vi møter plass i teksten, som er skilletegn for ord, må vi legge til dobbeltrom til resultatet.
  • Den resulterende strengen vil være morsekoden vi trengte.
  • Til slutt, returner resultatet.
  •   Nyttige WebSphere Application Server-administrasjonsskript

    Prøv å skrive koden i Python. Ikke bekymre deg, selv om du ikke klarer å skrive det helt.

    La oss sjekke koden for koding av ren 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(
        'tipsbilk.net 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 terminalen din hvis du ikke endret meldingen.

    --. . . -.- ..-. .-.. .- .-. .   .--. .-. --- -.. ..- -.-. . ...   .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.--   - . -.-. .... -. --- .-.. --- --. -.--   · − · · ·   ..-. .. -. .- -. -.-. .   .- .-. - .. -.-. .-.. . ... --..--   -- .- -.- . ...   - --- --- .-.. ... --..--   .- -. -..   .- .--. .. ...   - ---   .... . .-.. .--.   -... ..- ... .. -. . ... ... . ...   .- -. -..   .--. . --- .--. .-.. .   --. .-. --- .-- .-.-.-

    Hurra! vi har morsekoden. Du vet hva som kommer etterpå.

      Slik bruker du styreflatemodus på iPhone og iPad for å velge tekst

    Før vi hopper inn i dekodingsprogrammet, la oss stoppe opp en stund og tenke på hvordan du skriver kode for å dekode den.

    Du burde ha tenkt på å reversere CHARS_TO_MORSE_CODE_MAPPING-ordboken som ett av trinnene. Å gjøre det manuelt er hektisk og må oppdateres hver gang den opprinnelige kartleggingen endres. La oss skrive kode for å snu ordboken.

    def reverse_mapping(mapping):
        reversed = {}
        for key, value in mapping.items():
            reversed[value] = key
        return reversed

    Vi reverserer bare nøkkelverdi-parene til den gitte ordboken med koden ovenfor. Den resulterende ordboken vil inneholde verdier er nye nøkler og nøkler som nye verdier.

    Vi har alle brikkene for å dekode morsekoden til ren engelsk tekst. La oss uten videre dekode morsekoden.

    Morsekode til engelsk

    Vi kan reversere prosessen med morsekodekoding for å få dekodingsalgoritmen. La oss se algoritmen for å dekode morsekoden til ren engelsk tekst.

  • Omvendt CHARS_TO_MORSE_CODE_MAPPING-ordboken ved å bruke util-funksjonen vi har skrevet.
  • Iterer over morsekoden og hold styr på gjeldende morsekodetegnet.
    • Hvis vi møter et mellomrom, betyr det at vi har et fullstendig morsekodetegn å dekode.
      • Hvis gjeldende morsekodetegnet er tomt og vi har to påfølgende mellomrom, legg til en ordseparator som er et enkelt mellomrom i ren engelsk tekst.
      • Hvis betingelsen ovenfor er usann, henter du det dekodede tegnet fra ordboken og legger det til resultatet. Tilbakestill gjeldende morsekodetegnet.
    • Hvis vi ikke støter på plass, legg den til den gjeldende morse-karakteren.
  • Hvis det er det siste tegnet, legg det til resultatet etter dekoding ved hjelp av ordboken.
  • Returner resultatet til slutt.
  • La oss sjekke koden for algoritmen ovenfor.

    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 gitt morsekoden som er generert fra kodingsfunksjonen. Vi vil få følgende utgang hvis vi kjører programmet ovenfor.

    tipsbilk.net PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.

    Merk: utdataene er i det engelske store alfabetet fordi vi har brukt det store alfabetet for kartlegging i ordboken.

      11 beste verktøy for kontinuerlig integrasjon (CI) i 2022

    Siste ord

    Vi har sett at utgangen til dekodingsfunksjonen er med store bokstaver. Du kan forbedre programmet ved å gjøre utdataene slik de er på den gitte tiden ved å spore små og store bokstaver i det engelske alfabetet. Dette er ikke relatert til morsekode, da både store og små bokstaver har samme mønster. Prøv det, siden det er morsommere å kode.

    Det var alt for denne opplæringen. Bruk programmene vi har skrevet når du møter morsekode neste gang.

    Lykke til med koding 👨‍💻

    Du kan også se på hvordan du oppretter et tilfeldig passord i Python.