Morse kód fordító létrehozása Python segítségével

A morze kód egy üzenet kódolása pontok, kötőjelek és szóközök használatával. Széles körben használják üzenetek titkos közlésére.

Sok filmben láthattad már morze-kód használatát üzenetek közvetítésére. Itt ugyanarról a morze kódról beszélünk, de az egyetlen különbség az, hogy egy Python programot fogunk írni, amely angolról Morse-kódra fordít és fordítva.

Morze kód

A morze kód minden angol ábécéhez, számhoz, írásjelhez és nem latin karakterhez különböző mintákat tartalmaz. Miután ismeri a különböző karakterek morze-kódját, könnyen kódolhatja és dekódolhatja őket. További részletekért és mintákért tekintse meg a Wikipédia morzekód oldalát.

Ebben az oktatóanyagban megtanuljuk, hogyan lehet egyszerű angol szöveget morze kódba kódolni és fordítva. A dekódolás kódolásakor angol ábécét, számokat és írásjeleket fogunk használni. Ha több típusú karaktert szeretne hozzáadni, akkor könnyen megteheti, miután megtanulta a kódolás és dekódolás alapjait.

Ne feledje, hogy mind a nagy, mind a kisbetűs ábécéknek ugyanaz a morze kód mintája. Ennek az az oka, hogy a morze-kódot főként olyan kommunikációra használják, amely nem törődik az ábécé eseteivel, például a mindennapi beszélgetésekkel.

Térjünk rá a kódolási és dekódolási részre.

angolból morze kódra

Az egyszerű angol szöveg morzekóddá alakításának algoritmusa egyszerű. Nézzük meg az algoritmust.

  • Hozzon létre egy szótárt morze-minta-leképezésekkel, angol ábécével, számokkal és írásjelekkel.
  • Ismételje meg a szöveget, és adja hozzá az egyes szövegkarakterek morze kódját az eredményhez.
    • A morze kód minden karakter után szóközt és minden szó után dupla szóközt tartalmaz.
    • Tehát amikor szóközzel találkozunk a szövegben, ami a szavak elválasztója, akkor dupla szóközt kell hozzáadnunk az eredményhez.
  • Az eredményül kapott karakterlánc az a morze-kód lesz, amelyre szükségünk volt.
  • Végül adja vissza az eredményt.
  • Próbáld meg Pythonban írni a kódot. Ne aggódjon, még akkor sem, ha nem tudja teljesen leírni.

      Az Amazon rendelési előzmények elrejtése vagy törlése

    Ellenőrizzük a kódot az egyszerű angol szöveg morze kódba való kódolásához.

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

    Az alábbiakban láthatja a morzekód kimenetét. Hasonló morze-kódot kell látnia a terminálon is, ha nem változtatta meg az üzenetet.

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

    Hurrá! megkaptuk a morze kódot. Tudod mi jön utána.

      A 10 legjobb ETL-eszköz kis- és középvállalkozások számára 2022-ben

    Mielőtt belevágnánk a dekódoló programba, álljunk meg egy kicsit, és gondoljuk át, hogyan írjunk kódot a dekódoláshoz.

    Gondolnia kellett volna a CHARS_TO_MORSE_CODE_MAPPING szótár megfordítására, mint az egyik lépésre. A manuális végrehajtás hektikus, és minden alkalommal frissíteni kell, amikor az eredeti leképezés megváltozik. Írjunk kódot a szótár megfordításához.

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

    Éppen megfordítjuk az adott szótár kulcs-érték párjait a fenti kóddal. Az eredményül kapott szótár új kulcsokat és új kulcsokat fog tartalmazni.

    Minden eszközünk megvan ahhoz, hogy a morze kódot egyszerű angol szöveggé dekódoljuk. Minden további nélkül dekódoljuk a morze kódot.

    Morse kód angolra

    Megfordíthatjuk a morze kódolás folyamatát, hogy megkapjuk a dekódoló algoritmust. Lássuk a morze kód egyszerű angol szöveggé való dekódolásának algoritmusát.

  • Fordítsa meg a CHARS_TO_MORSE_CODE_MAPPING szótárt az általunk írt util függvény segítségével.
  • Ismételje meg a morze kódot, és kövesse nyomon az aktuális morze karaktert.
    • Ha szóközzel találkozunk, az azt jelenti, hogy egy teljes morze karaktert kell dekódolnunk.
      • Ha az aktuális morze karakter üres, és két egymást követő szóközünk van, akkor adjon hozzá egy szóelválasztót, amely egyetlen szóköz az egyszerű angol szövegben.
      • Ha a fenti feltétel hamis, akkor vegye ki a dekódolt karaktert a szótárból, és adja hozzá az eredményhez. Állítsa vissza az aktuális morze karaktert.
    • Ha nem találkoztunk szóközzel, add hozzá az aktuális morze karakterhez.
  • Ha megvan az utolsó karakter, akkor a szótár segítségével történő dekódolás után adja hozzá az eredményhez.
  • A végén adja vissza az eredményt.
  • Ellenőrizzük a fenti algoritmus kódját.

    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)

    Megadtam a kódoló függvényből előállított morze kódot. A következő kimenetet kapjuk, ha a fenti programot futtatjuk.

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

    Megjegyzés: a kimenet az angol nagybetűs ábécé, mert a szótárban a nagybetűs ábécét használtuk a leképezéshez.

      Úszás és merülés az „Animal Crossing: New Horizons” című filmben

    Végső szavak

    Láttuk, hogy a dekódoló függvény kimenete nagybetűs. Az angol ábécé alsó és felső betűinek nyomon követésével javíthatja a programot, ha a kimenetet az adott időpontban aktuálissá teszi. Ez nem kapcsolódik a morze kódhoz, mivel mind a felső, mind a kisbetűk ugyanazt a mintát tartalmazzák. Próbáld ki, mert szórakoztatóbb a kódolás.

    Ennyi az oktatóanyag. Használja az általunk írt programokat, ha legközelebb morzekóddal találkozik.

    Boldog kódolást 👨‍💻

    Azt is megnézheti, hogyan hozhat létre véletlenszerű jelszót a Pythonban.