Hur man skapar en morsekodöversättare med Python

Morsekod är en metod för att koda ett meddelande med hjälp av punkter, bindestreck och mellanslag. Det används ofta för att kommunicera meddelanden i hemlighet.

Du kanske har sett morsekodanvändning i marinscener i många filmer för att kommunicera meddelanden. Vi pratar om samma morsekod här, men den enda skillnaden är att vi ska skriva ett Python-program för att översätta från engelska till morsekod och vice versa.

morse kod

Morsekod har olika mönster för varje engelskt alfabet, tal, skiljetecken och icke-latinska tecken. När du väl känner till morsekodsmönstren för olika tecken blir det lätt att koda och avkoda dem. Du kan hänvisa till Wikipedia-sidan med morsekod för mer detaljer och mönster.

I den här handledningen kommer vi att lära oss hur man kodar vanlig engelsk text till morsekod och vice versa. Vi kommer att använda engelska alfabet, siffror och skiljetecken när vi kodar avkodningen. Om du vill lägga till fler typer av tecken kan du enkelt göra det när du har lärt dig grunden för kodning och avkodning.

En sak att komma ihåg är att både versaler och gemener har samma morsekodmönster. Detta beror på att morsekoden främst används för kommunikation som inte bryr sig om alfabetsfall som vardagliga konversationer.

Låt oss komma in på kodningsdelen för kodning och avkodning.

Engelska till morsekod

Algoritmen för att konvertera vanlig engelsk text till morsekod är enkel. Låt oss kolla algoritmen.

  • Skapa en ordbok med mappningar av morsekodmönster med engelska alfabet, siffror och skiljetecken.
  • Iterera över texten och lägg till morsekodsmönstret för varje texttecken till resultatet.
    • Morsekod innehåller ett mellanslag efter varje tecken och ett dubbelt mellanslag efter varje ord.
    • Så när vi stöter på utrymme i texten, som är avgränsaren för ord, måste vi lägga till dubbelt utrymme till resultatet.
  • Den resulterande strängen kommer att vara morsekoden som vi behövde.
  • Till sist, returnera resultatet.
  • Försök att skriva koden i Python. Oroa dig inte, även om du inte kan skriva det helt.

    Låt oss kontrollera koden för att koda vanlig engelsk text till morsekod.

    # 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(
        'adminvista.com produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.'
    )
    print(morse_code)

    Du kan se morsekoden nedan. Du bör också se en liknande morsekod i din terminal om du inte ändrade meddelandet.

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

    hurra! vi fick morsekoden. Du vet vad som kommer efter.

    Innan vi hoppar in i avkodningsprogrammet, låt oss stanna upp ett tag och fundera på hur man skriver kod för att avkoda den.

    Du borde ha tänkt på att vända på CHARS_TO_MORSE_CODE_MAPPING-ordboken som ett av stegen. Att göra det manuellt är hektiskt och behöver uppdateras när den ursprungliga kartläggningen ändras. Låt oss skriva kod för att vända ordboken.

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

    Vi vänder bara om nyckel-värdeparen i den givna ordboken med ovanstående kod. Den resulterande ordboken kommer att innehålla värden är nya nycklar och nycklar som nya värden.

    Vi har alla bitar för att avkoda morsekoden till vanlig engelsk text. Låt oss utan vidare avkoda morsekoden.

    Morsekod till engelska

    Vi kan vända processen med morsekodning för att få avkodningsalgoritmen. Låt oss se algoritmen för att avkoda morsekoden till vanlig engelsk text.

  • Vänd om på CHARS_TO_MORSE_CODE_MAPPING-ordboken med hjälp av util-funktionen vi har skrivit.
  • Iterera över morsekoden och håll reda på det aktuella morsekoden.
    • Om vi ​​stöter på ett mellanslag betyder det att vi har ett komplett morsekodtecken att avkoda.
      • Om det aktuella morsekoden är tomt och vi har två på varandra följande mellanslag, lägg sedan till en ordavgränsare som är ett enda mellanslag i vanlig engelsk text.
      • Om villkoret ovan är falskt, hämta det avkodade tecknet från ordboken och lägg till det i resultatet. Återställ det aktuella morsekoden.
    • Om vi ​​inte stötte på utrymme, lägg till det till den aktuella morsekaraktären.
  • Om det finns det sista tecknet, lägg till det i resultatet efter avkodning med hjälp av ordboken.
  • Returnera resultatet i slutet.
  • Låt oss kontrollera koden för ovanstående algoritm.

    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)

    Jag har gett morsekoden som genereras från kodningsfunktionen. Vi kommer att få följande utdata om vi kör programmet ovan.

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

    Obs: utgången är i det engelska versalalfabetet eftersom vi har använt det versaler för mappning i ordboken.

    Slutord

    Vi har sett att utdata från avkodningsfunktionen är i versaler. Du kan förbättra programmet genom att göra utdata som den är under den givna tiden genom att spåra de gemener och versaler i det engelska alfabetet. Detta är inte relaterat till morsekod, eftersom både versaler och gemener har samma mönster. Testa det, eftersom det är roligare att koda.

    Det var allt för den här handledningen. Använd de program vi har skrivit när du stöter på morsekod nästa gång.

    Glad kodning 👨‍💻

    Du kan också titta på hur man skapar ett slumpmässigt lösenord i Python.