Ο κώδικας Μορς είναι μια μέθοδος για την κωδικοποίηση ενός μηνύματος χρησιμοποιώντας τελείες, παύλες και κενά. Χρησιμοποιείται ευρέως για την κρυφή επικοινωνία μηνυμάτων.
Μπορεί να έχετε δει τη χρήση του κώδικα Μορς σε ναυτικές σκηνές πολλών ταινιών για την επικοινωνία μηνυμάτων. Μιλάμε για τον ίδιο κώδικα Μορς εδώ, αλλά η μόνη διαφορά είναι ότι πρόκειται να γράψουμε ένα πρόγραμμα Python για να μεταφράσουμε από τα αγγλικά σε κώδικα Μορς και αντίστροφα.
Πίνακας περιεχομένων
κώδικας Μορς
Ο κώδικας Μορς έχει διαφορετικά μοτίβα για κάθε αγγλικό αλφάβητο, αριθμό, σημεία στίξης και μη λατινικούς χαρακτήρες. Μόλις μάθετε τα μοτίβα του κώδικα Μορς για διαφορετικούς χαρακτήρες, θα είναι εύκολο να τους κωδικοποιήσετε και να τους αποκωδικοποιήσετε. Μπορείτε να ανατρέξετε στη σελίδα του κώδικα Morse της Wikipedia για περισσότερες λεπτομέρειες και μοτίβα.
Σε αυτό το σεμινάριο, θα μάθουμε πώς να κωδικοποιούμε απλό αγγλικό κείμενο σε κώδικα Μορς και αντίστροφα. Θα χρησιμοποιήσουμε αγγλικά αλφάβητα, αριθμούς και σημεία στίξης κατά την κωδικοποίηση της αποκωδικοποίησης. Εάν θέλετε να προσθέσετε περισσότερους τύπους χαρακτήρων, μπορείτε εύκολα να το κάνετε μόλις μάθετε τη βάση της κωδικοποίησης και της αποκωδικοποίησης.
Ένα πράγμα που πρέπει να θυμάστε είναι ότι τόσο τα κεφαλαία όσο και τα πεζά αλφάβητα έχουν το ίδιο μοτίβο κώδικα μορς. Αυτό οφείλεται στο γεγονός ότι ο κώδικας Μορς χρησιμοποιείται κυρίως για επικοινωνία που δεν ενδιαφέρεται για αλφαβητάρια όπως οι καθημερινές συνομιλίες.
Ας μπούμε στο κομμάτι της κωδικοποίησης για την κωδικοποίηση και την αποκωδικοποίηση.
Κώδικας Αγγλικά σε Μορς
Ο αλγόριθμος για τη μετατροπή απλού αγγλικού κειμένου σε κώδικα Μορς είναι απλός. Ας ελέγξουμε τον αλγόριθμο.
- Ο κώδικας Μορς περιέχει ένα κενό μετά από κάθε χαρακτήρα και ένα διπλό διάστημα μετά από κάθε λέξη.
- Όταν λοιπόν συναντάμε χώρο στο κείμενο, που είναι το διαχωριστικό για τις λέξεις, πρέπει να προσθέσουμε διπλό διάστημα στο αποτέλεσμα.
Προσπαθήστε να γράψετε τον κώδικα σε 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
Απλώς αντιστρέφουμε τα ζεύγη κλειδιών-τιμών του συγκεκριμένου λεξικού με τον παραπάνω κωδικό. Το λεξικό που προκύπτει θα περιέχει τιμές είναι νέα κλειδιά και κλειδιά ως νέες τιμές.
Έχουμε όλα τα κομμάτια για να αποκωδικοποιήσουμε τον κώδικα Μορς σε απλό αγγλικό κείμενο. Χωρίς άλλη καθυστέρηση, ας αποκωδικοποιήσουμε τον κώδικα Μορς.
Κώδικας Μορς στα Αγγλικά
Μπορούμε να αντιστρέψουμε τη διαδικασία κωδικοποίησης του κώδικα Μορς για να πάρουμε τον αλγόριθμο αποκωδικοποίησης. Ας δούμε τον αλγόριθμο για την αποκωδικοποίηση του κώδικα Μορς σε απλό αγγλικό κείμενο.
- Αν συναντήσουμε ένα κενό, σημαίνει ότι έχουμε έναν πλήρη χαρακτήρα κώδικα Μορς για αποκωδικοποίηση.
- Εάν ο τρέχων χαρακτήρας του κώδικα Μορς είναι κενός και έχουμε δύο διαδοχικά κενά, τότε προσθέστε ένα διαχωριστικό λέξεων που είναι ένα ενιαίο διάστημα σε απλό αγγλικό κείμενο.
- Εάν η παραπάνω συνθήκη είναι ψευδής, τότε πάρτε τον αποκωδικοποιημένο χαρακτήρα από το λεξικό και προσθέστε τον στο αποτέλεσμα. Επαναφέρετε τον τρέχοντα χαρακτήρα του κώδικα Μορς.
- Εάν δεν συναντήσαμε διάστημα, προσθέστε το στον τρέχοντα χαρακτήρα morse.
Ας ελέγξουμε τον κώδικα για τον παραπάνω αλγόριθμο.
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.