Morsekode representerer en metode for koding av meldinger ved hjelp av punkter, streker og mellomrom. Denne metoden brukes ofte for å overføre hemmelige meldinger.
Mange har sett bruken av morsekode i scener fra marinefilmer der det brukes for å kommunisere. Den samme morsekoden skal vi nå se nærmere på, men med en liten forskjell; vi skal skrive et Python-program som oversetter fra engelsk til morsekode og omvendt.
Morsekode
Hver bokstav i det engelske alfabetet, tall, tegnsetting og ikke-latinske tegn har et unikt mønster i morsekode. Når du har lært disse mønstrene, vil det være enkelt å kode og dekode meldinger. Du finner mer informasjon og detaljer om disse mønstrene på Wikipedia sin side om morsekode.
I denne opplæringen skal vi lære å konvertere ren engelsk tekst til morsekode og tilbake. Vi vil benytte oss av engelske alfabeter, tall og tegnsetting i både kodingen og dekodingen. Du kan enkelt legge til flere tegn senere når du har fått en forståelse av hvordan grunnleggende koding og dekoding fungerer.
Det er viktig å huske at både store og små bokstaver har samme morsekodemønster. Dette skyldes at morsekode primært brukes for kommunikasjon der forskjell på store og små bokstaver ikke spiller noen rolle.
La oss nå gå i gang med selve kodingen og dekodingen.
Engelsk til morsekode
Algoritmen for å konvertere ren engelsk tekst til morsekode er enkel. Her er en oversikt over algoritmen:
- Opprett en ordbok som knytter hvert engelske alfabet, tall og tegnsetting til deres respektive morsekodemønstre.
- Gå gjennom teksten og legg til morsekodemønsteret for hvert tegn i resultatet.
- I morsekode er det et mellomrom etter hvert tegn og et dobbelt mellomrom etter hvert ord.
- Når vi støter på et mellomrom i teksten, som skiller ord, legger vi til et dobbelt mellomrom til resultatet.
- Den resulterende strengen vil være morsekoden.
- Til slutt, returner resultatet.
Prøv å skrive denne koden i Python selv. Det er helt greit om du ikke får det helt til med en gang.
La oss se på koden for å kode ren engelsk tekst til morsekode:
# ordbok for å knytte tegn til morsekode 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': '-----', '.': '.-.-.-', ',': '--..--', '?': '..--..', '\'': '· − − − − ·', '!': '− · − · − −', '/': '− · · − ·', '(': '− · − − ·', ')': '− · − − · −', '&': '· − · · ·', ':': '− − − · · ·', ';': '− · − · − ·', '=': '− · · · −', '+': '· − · − ·', '-': '− · · · · −', '_': '· · − − · −', '"': '· − · · − ·', '$': '· · · − · · −', '@': '· − − · − ·', } # funksjon for å kode engelsk tekst til morsekode def to_morse_code(english_plain_text): morse_code="" for char in english_plain_text: # sjekker for mellomrom # for å legge til enkelt mellomrom etter hvert tegn og dobbelt mellomrom etter hvert ord if char == ' ': morse_code += ' ' else: # legger til kodet morsekode til resultatet 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)
Nedenfor ser du morsekoden som ble generert. Du bør også se en lignende kode i terminalen hvis du ikke endret meldingen.
--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.-
Flott! Nå har vi morsekoden. Du vet hva som kommer etterpå.
Før vi går videre til dekodingsprogrammet, la oss tenke litt over hvordan vi skal skrive kode for å dekode den.
…
Du har sannsynligvis tenkt på å reversere `CHARS_TO_MORSE_CODE_MAPPING`-ordboken som ett av trinnene. Det ville være tungvint å gjøre dette manuelt, og ordboken måtte oppdateres hver gang den opprinnelige kartleggingen ble endret. La oss skrive kode for å snu ordboken.
def reverse_mapping(mapping): reversed = {} for key, value in mapping.items(): reversed[value] = key return reversed
Koden over snur bare om nøkkel-verdi-parene i den gitte ordboken. Den resulterende ordboken vil ha de tidligere verdiene som nye nøkler og de tidligere nøklene som nye verdier.
Vi har nå alle bitene vi trenger for å dekode morsekode til ren engelsk tekst. La oss dekode morsekoden uten videre.
Morsekode til engelsk
Vi kan reversere prosessen med morsekodekoding for å få dekodingsalgoritmen. La oss se på algoritmen for å dekode morsekode til ren engelsk tekst:
- Reverser `CHARS_TO_MORSE_CODE_MAPPING`-ordboken ved å bruke funksjonen vi nettopp skrev.
- Gå gjennom morsekoden og hold styr på det gjeldende morsekodetegnet.
- Hvis vi støter på et mellomrom, betyr det at vi har et fullstendig morsekodetegn å dekode.
- Hvis det gjeldende morsekodetegnet er tomt og vi har to påfølgende mellomrom, legg til et ordseparator (enkelt mellomrom) i den rene engelske teksten.
- Hvis betingelsen over ikke stemmer, henter du det dekodede tegnet fra ordboken og legger det til resultatet. Nullstill det gjeldende morsekodetegnet.
- Hvis vi ikke støter på et mellomrom, legger du til tegnet i det gjeldende morsekodetegnet.
- Hvis vi støter på et mellomrom, betyr det at vi har et fullstendig morsekodetegn å dekode.
- Hvis det er det siste tegnet, legger du det til resultatet etter dekoding ved hjelp av ordboken.
- Returner resultatet til slutt.
La oss se på koden for algoritmen over:
def reverse_mapping(mapping): # legg til funksjonskoden fra forrige kodesnutt... CHARS_TO_MORSE_CODE_MAPPING = {} # legg til ordbokverdier 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: # sjekker hvert tegn if morse_code[i] == ' ': # sjekker for ord if len(current_char_morse_code) == 0 and morse_code[i + 1] == ' ': english_plain_text += ' ' i += 1 else: # legger til dekodet tegn til resultatet english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[ current_char_morse_code] current_char_morse_code="" else: # legger til morsekodetegnet til gjeldende tegn current_char_morse_code += morse_code[i] i += 1 # legger til det siste tegnet til resultatet 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 brukt morsekoden som ble generert fra kodingsfunksjonen. Hvis vi kjører programmet over, får vi følgende utdata:
TIPSBILK.NET PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.
Merk: Utdataene er i store bokstaver fordi vi har brukt store bokstaver for kartlegging i ordboken.
Siste ord
Vi ser at utdataene fra dekodingsfunksjonen er i store bokstaver. Du kan forbedre programmet ved å la utdataene beholde små og store bokstaver fra originalteksten. Dette har ingenting å gjøre med morsekode i seg selv, siden store og små bokstaver har samme mønster. Prøv deg frem, det er gøy å kode!
Det var alt for denne opplæringen. Bruk gjerne programmene vi har skrevet neste gang du støter på morsekode.
Lykke til med kodingen! 👨💻
Du kan også se på hvordan du oppretter et tilfeldig passord i Python.