วิธีสร้างโปรแกรมแปลรหัสมอร์สโดยใช้ Python

เผยแพร่แล้ว: 2022-10-19

รหัสมอร์สเป็นวิธีการเข้ารหัสข้อความโดยใช้ จุด ขีดกลาง และ เว้นวรรค มีการใช้กันอย่างแพร่หลายในการสื่อสารข้อความอย่างลับๆ

คุณอาจเคยเห็นการใช้รหัสมอร์สในฉากกองทัพเรือของภาพยนตร์หลายเรื่องเพื่อสื่อสารข้อความ เรากำลังพูดถึงรหัสมอร์สเดียวกันที่นี่ แต่ข้อแตกต่างเพียงอย่างเดียวคือเราจะเขียนโปรแกรม Python เพื่อแปลจากภาษาอังกฤษเป็นรหัสมอร์สและในทางกลับกัน

รหัสมอร์ส

รหัสมอร์สมีรูปแบบที่แตกต่างกันสำหรับตัวอักษรภาษาอังกฤษ ตัวเลข เครื่องหมายวรรคตอน และอักขระที่ไม่ใช่ละติน เมื่อคุณทราบรูปแบบรหัสมอร์สสำหรับอักขระต่างๆ แล้ว การเข้ารหัสและถอดรหัสจะเป็นเรื่องง่าย คุณสามารถอ้างอิงหน้า Wikipedia ของรหัสมอร์สสำหรับรายละเอียดและรูปแบบเพิ่มเติม

รหัสมอร์ส

ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีเข้ารหัสข้อความภาษาอังกฤษธรรมดาเป็นรหัสมอร์สและในทางกลับกัน เราจะใช้ตัวอักษร ตัวเลข และเครื่องหมายวรรคตอนภาษาอังกฤษขณะเข้ารหัสการถอดรหัส หากคุณต้องการเพิ่มประเภทอักขระมากขึ้น คุณสามารถทำได้ง่ายๆ เมื่อคุณเรียนรู้พื้นฐานของการเข้ารหัสและถอดรหัสแล้ว

สิ่งหนึ่งที่ต้องจำไว้คือทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีรูปแบบรหัสมอร์สเหมือนกัน เนื่องจากรหัสมอร์สส่วนใหญ่ใช้สำหรับการสื่อสารซึ่งไม่สนใจกรณีตัวอักษรเช่นการสนทนาในชีวิตประจำวัน

มาเข้าสู่ส่วนการเข้ารหัสสำหรับการเข้ารหัสและถอดรหัสกัน

รหัสภาษาอังกฤษเป็นมอร์ส

อัลกอริทึมในการแปลงข้อความภาษาอังกฤษธรรมดาเป็นรหัสมอร์สนั้นตรงไปตรงมา ลองตรวจสอบอัลกอริทึม

  1. สร้างพจนานุกรมด้วยการจับคู่รูปแบบรหัสมอร์สด้วยตัวอักษรภาษาอังกฤษ ตัวเลข และเครื่องหมายวรรคตอน
  2. วนซ้ำข้อความและเพิ่มรูปแบบรหัสมอร์สของอักขระข้อความแต่ละตัวในผลลัพธ์
    • รหัสมอร์สประกอบด้วย ช่องว่าง หลังอักขระแต่ละตัวและช่องว่างคู่หลังแต่ละคำ
    • ดังนั้นเมื่อเราพบช่องว่างในข้อความ ซึ่งเป็นตัวคั่นของคำ เราจำเป็นต้องเพิ่มช่องว่างสองเท่าในผลลัพธ์
  3. สตริงผลลัพธ์จะเป็นรหัสมอร์สที่เราต้องการ
  4. สุดท้ายให้ส่งคืนผลลัพธ์

ลองเขียนโค้ดในภาษาไพทอน อย่ากังวลแม้ว่าคุณจะเขียนไม่หมด

ตรวจสอบรหัสสำหรับการเข้ารหัสข้อความภาษาอังกฤษธรรมดาเป็นรหัสมอร์ส

 # 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( 'Geekflare 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

เรากำลังย้อนกลับคู่คีย์-ค่าของพจนานุกรมที่กำหนดด้วยโค้ดด้านบน พจนานุกรมผลลัพธ์จะมีค่าเป็นคีย์ใหม่และคีย์เป็นค่าใหม่

เรามีชิ้นส่วนทั้งหมดที่จะถอดรหัสรหัสมอร์สเป็นข้อความภาษาอังกฤษธรรมดา เพื่อไม่ให้เป็นการเสียเวลา เรามาถอดรหัสรหัสมอร์สกัน

รหัสมอร์สเป็นภาษาอังกฤษ

เราสามารถย้อนกลับกระบวนการเข้ารหัสรหัสมอร์สเพื่อให้ได้อัลกอริธึมการถอดรหัส มาดูอัลกอริธึมสำหรับการถอดรหัสรหัสมอร์สเป็นข้อความภาษาอังกฤษธรรมดากัน

  1. ย้อนกลับพจนานุกรม CHARS_TO_MORSE_CODE_MAPPING โดยใช้ฟังก์ชัน util ที่เราได้เขียนไว้
  2. วนซ้ำรหัสมอร์สและติดตามอักขระรหัสมอร์สปัจจุบัน
    • หากเราพบช่องว่าง แสดงว่าเรามีอักขระรหัสมอร์สที่สมบูรณ์เพื่อถอดรหัส
      • หากอักขระรหัสมอร์สปัจจุบันว่างเปล่าและเรามีช่องว่างสองช่องติดต่อกัน ให้เพิ่มตัวคั่นคำซึ่งเป็นช่องว่างเดียวในข้อความภาษาอังกฤษธรรมดา
      • หากเงื่อนไขข้างต้นเป็นเท็จ ให้รับอักขระที่ถอดรหัสจากพจนานุกรมแล้วเพิ่มลงในผลลัพธ์ รีเซ็ตอักขระรหัสมอร์สปัจจุบัน
    • ถ้าเราไม่พบช่องว่าง ให้เพิ่มเข้าไปในอักขระมอร์สปัจจุบัน
  3. หากมีอักขระตัวสุดท้าย ให้เพิ่มลงในผลลัพธ์หลังจากถอดรหัสโดยใช้พจนานุกรม
  4. ส่งคืนผลลัพธ์ในตอนท้าย

ตรวจสอบรหัสสำหรับอัลกอริทึมข้างต้น

 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)

ฉันได้ให้รหัสมอร์สที่สร้างขึ้นจากฟังก์ชันการเข้ารหัส เราจะได้ผลลัพธ์ต่อไปนี้หากเรารันโปรแกรมข้างต้น

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

หมายเหตุ: ผลลัพธ์เป็นอักษรตัวพิมพ์ใหญ่ภาษาอังกฤษ เนื่องจากเราใช้อักษรตัวพิมพ์ใหญ่สำหรับการแมปในพจนานุกรม

คำพูดสุดท้าย

เราได้เห็นแล้วว่าผลลัพธ์ของฟังก์ชันถอดรหัสเป็นตัวพิมพ์ใหญ่ คุณสามารถปรับปรุงโปรแกรมได้โดยการสร้างผลลัพธ์ตามเวลาที่กำหนดโดยการติดตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของตัวอักษรภาษาอังกฤษ สิ่งนี้ไม่เกี่ยวข้องกับรหัสมอร์ส เนื่องจากทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีรูปแบบเดียวกัน ลองใช้เพราะมันสนุกกว่าในการเขียนโค้ด

เพียงเท่านี้สำหรับบทช่วยสอนนี้ ใช้โปรแกรมที่เราเขียนเมื่อคุณพบรหัสมอร์สในครั้งต่อไป

Happy Coding

คุณอาจดูวิธีสร้างรหัสผ่านแบบสุ่มใน Python