Πώς να δημιουργήσετε έναν μεταφραστή κώδικα Μορς χρησιμοποιώντας την Python

Ο κώδικας Μορς είναι μια μέθοδος για την κωδικοποίηση ενός μηνύματος χρησιμοποιώντας τελείες, παύλες και κενά. Χρησιμοποιείται ευρέως για την κρυφή επικοινωνία μηνυμάτων.

Μπορεί να έχετε δει τη χρήση του κώδικα Μορς σε ναυτικές σκηνές πολλών ταινιών για την επικοινωνία μηνυμάτων. Μιλάμε για τον ίδιο κώδικα Μορς εδώ, αλλά η μόνη διαφορά είναι ότι πρόκειται να γράψουμε ένα πρόγραμμα Python για να μεταφράσουμε από τα αγγλικά σε κώδικα Μορς και αντίστροφα.

κώδικας Μορς

Ο κώδικας Μορς έχει διαφορετικά μοτίβα για κάθε αγγλικό αλφάβητο, αριθμό, σημεία στίξης και μη λατινικούς χαρακτήρες. Μόλις μάθετε τα μοτίβα του κώδικα Μορς για διαφορετικούς χαρακτήρες, θα είναι εύκολο να τους κωδικοποιήσετε και να τους αποκωδικοποιήσετε. Μπορείτε να ανατρέξετε στη σελίδα του κώδικα Morse της Wikipedia για περισσότερες λεπτομέρειες και μοτίβα.

Σε αυτό το σεμινάριο, θα μάθουμε πώς να κωδικοποιούμε απλό αγγλικό κείμενο σε κώδικα Μορς και αντίστροφα. Θα χρησιμοποιήσουμε αγγλικά αλφάβητα, αριθμούς και σημεία στίξης κατά την κωδικοποίηση της αποκωδικοποίησης. Εάν θέλετε να προσθέσετε περισσότερους τύπους χαρακτήρων, μπορείτε εύκολα να το κάνετε μόλις μάθετε τη βάση της κωδικοποίησης και της αποκωδικοποίησης.

Ένα πράγμα που πρέπει να θυμάστε είναι ότι τόσο τα κεφαλαία όσο και τα πεζά αλφάβητα έχουν το ίδιο μοτίβο κώδικα μορς. Αυτό οφείλεται στο γεγονός ότι ο κώδικας Μορς χρησιμοποιείται κυρίως για επικοινωνία που δεν ενδιαφέρεται για αλφαβητάρια όπως οι καθημερινές συνομιλίες.

Ας μπούμε στο κομμάτι της κωδικοποίησης για την κωδικοποίηση και την αποκωδικοποίηση.

Κώδικας Αγγλικά σε Μορς

Ο αλγόριθμος για τη μετατροπή απλού αγγλικού κειμένου σε κώδικα Μορς είναι απλός. Ας ελέγξουμε τον αλγόριθμο.

  • Δημιουργήστε ένα λεξικό με αντιστοιχίσεις μοτίβων κώδικα Μορς με αγγλικά αλφάβητα, αριθμούς και σημεία στίξης.
  • Επαναλάβετε το κείμενο και προσθέστε το μοτίβο του κώδικα Μορς κάθε χαρακτήρα κειμένου στο αποτέλεσμα.
    • Ο κώδικας Μορς περιέχει ένα κενό μετά από κάθε χαρακτήρα και ένα διπλό διάστημα μετά από κάθε λέξη.
    • Όταν λοιπόν συναντάμε χώρο στο κείμενο, που είναι το διαχωριστικό για τις λέξεις, πρέπει να προσθέσουμε διπλό διάστημα στο αποτέλεσμα.
      Πώς να δημιουργήσετε φόρμες PDF με υπολογισμούς στο Adobe Acrobat
  • Η συμβολοσειρά που προκύπτει θα είναι ο κώδικας Μορς που χρειαζόμασταν.
  • Τέλος, επιστρέψτε το αποτέλεσμα.
  • Προσπαθήστε να γράψετε τον κώδικα σε Python. Μην ανησυχείτε, ακόμα κι αν δεν μπορείτε να το γράψετε πλήρως.

    Ας ελέγξουμε τον κωδικό για την κωδικοποίηση απλού αγγλικού κειμένου σε κώδικα Μορς.

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

    Μπορείτε να δείτε την έξοδο του κώδικα Μορς παρακάτω. Θα πρέπει επίσης να δείτε έναν παρόμοιο κωδικό Μορς στο τερματικό σας, εάν δεν αλλάξατε το μήνυμα.

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

    Ούρα! πήραμε τον κωδικό Μορς. Ξέρεις τι ακολουθεί.

      Τι είναι η επίθεση «Κακιά Υπηρέτρια» και Τι Μας Διδάσκει;

    Πριν μεταβούμε στο πρόγραμμα αποκωδικοποίησης, ας σταματήσουμε λίγο και ας σκεφτούμε πώς να γράψουμε κώδικα για να τον αποκωδικοποιήσουμε.

    Θα έπρεπε να σκεφτείτε να αντιστρέψετε το λεξικό CHARS_TO_MORSE_CODE_MAPPING ως ένα από τα βήματα. Το να το κάνετε με το χέρι είναι ταραχώδες και πρέπει να ενημερώνεται κάθε φορά που αλλάζει η αρχική χαρτογράφηση. Ας γράψουμε κώδικα για να αντιστρέψουμε το λεξικό.

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

    Απλώς αντιστρέφουμε τα ζεύγη κλειδιών-τιμών του συγκεκριμένου λεξικού με τον παραπάνω κωδικό. Το λεξικό που προκύπτει θα περιέχει τιμές είναι νέα κλειδιά και κλειδιά ως νέες τιμές.

    Έχουμε όλα τα κομμάτια για να αποκωδικοποιήσουμε τον κώδικα Μορς σε απλό αγγλικό κείμενο. Χωρίς άλλη καθυστέρηση, ας αποκωδικοποιήσουμε τον κώδικα Μορς.

    Κώδικας Μορς στα Αγγλικά

    Μπορούμε να αντιστρέψουμε τη διαδικασία κωδικοποίησης του κώδικα Μορς για να πάρουμε τον αλγόριθμο αποκωδικοποίησης. Ας δούμε τον αλγόριθμο για την αποκωδικοποίηση του κώδικα Μορς σε απλό αγγλικό κείμενο.

  • Αντιστρέψτε το λεξικό CHARS_TO_MORSE_CODE_MAPPING χρησιμοποιώντας τη συνάρτηση util που έχουμε γράψει.
  • Επαναλάβετε τον κώδικα Μορς και παρακολουθήστε τον τρέχοντα χαρακτήρα του κώδικα Μορς.
    • Αν συναντήσουμε ένα κενό, σημαίνει ότι έχουμε έναν πλήρη χαρακτήρα κώδικα Μορς για αποκωδικοποίηση.
      • Εάν ο τρέχων χαρακτήρας του κώδικα Μορς είναι κενός και έχουμε δύο διαδοχικά κενά, τότε προσθέστε ένα διαχωριστικό λέξεων που είναι ένα ενιαίο διάστημα σε απλό αγγλικό κείμενο.
      • Εάν η παραπάνω συνθήκη είναι ψευδής, τότε πάρτε τον αποκωδικοποιημένο χαρακτήρα από το λεξικό και προσθέστε τον στο αποτέλεσμα. Επαναφέρετε τον τρέχοντα χαρακτήρα του κώδικα Μορς.
    • Εάν δεν συναντήσαμε διάστημα, προσθέστε το στον τρέχοντα χαρακτήρα morse.
  • Εάν υπάρχει ο τελευταίος χαρακτήρας, προσθέστε τον στο αποτέλεσμα μετά την αποκωδικοποίηση χρησιμοποιώντας το λεξικό.
  • Επιστρέψτε το αποτέλεσμα στο τέλος.
  •   Πώς να αλλάξετε τη θέση δημιουργίας αντιγράφων ασφαλείας του iTunes

    Ας ελέγξουμε τον κώδικα για τον παραπάνω αλγόριθμο.

    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)

    Έχω δώσει τον κώδικα Μορς που δημιουργείται από τη συνάρτηση κωδικοποίησης. Θα λάβουμε την ακόλουθη έξοδο εάν τρέξουμε το παραπάνω πρόγραμμα.

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

    Σημείωση: η έξοδος είναι στο αγγλικό κεφαλαίο αλφάβητο επειδή χρησιμοποιήσαμε το κεφαλαίο αλφάβητο για αντιστοίχιση στο λεξικό.

    Τελικές Λέξεις

    Είδαμε ότι η έξοδος της συνάρτησης αποκωδικοποίησης είναι με κεφαλαία. Μπορείτε να βελτιώσετε το πρόγραμμα κάνοντας την έξοδο ως έχει τη δεδομένη χρονική στιγμή παρακολουθώντας τα κάτω και τα πάνω γράμματα του αγγλικού αλφαβήτου. Αυτό δεν σχετίζεται με τον κώδικα Μορς, καθώς και τα κεφαλαία και τα πεζά έχουν το ίδιο μοτίβο. Δοκιμάστε το, καθώς είναι πιο διασκεδαστικό να κωδικοποιείτε.

    Αυτό είναι για αυτό το σεμινάριο. Χρησιμοποιήστε τα προγράμματα που έχουμε γράψει όταν συναντήσετε τον κώδικα Μορς την επόμενη φορά.

    Καλή κωδικοποίηση 👨‍💻

    Μπορείτε επίσης να δείτε πώς να δημιουργήσετε έναν τυχαίο κωδικό πρόσβασης στην Python.