Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมแปลรหัสโมส (Morse Code Translator) ใน Python

Morse Code Translator ใช้ในทฤษฎีการเข้ารหัส (Cryptography) ตั้งชื่อโดย Samuel F. B. Morse เทคนิคนี้แปลงข้อความเป็นชุดของจุด (.) ขีด (-) และเครื่องหมายจุลภาค (/)

เทคนิคนี้ง่ายมาก ทุกตัวอักษรอังกฤษมีรหัส Morse แทน เราเพียงเข้ารหัสจากข้อความเป็นสัญลักษณ์ และถอดรหัสจากสัญลักษณ์กลับเป็นอังกฤษ

ตารางรหัส Morse (Dictionary)

MORSE_CODE_DICT = {
    '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':'-----',
    ', ':'--..--', '.':'.-.-.-', '?':'..--..', '/':'-..-.',
    '-':'-....-', '(':'-.--.', ')':'-.--.-'
}

ตัวอย่าง

Message: PYTHON-PROGRAM
Output: .--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- --

อัลกอริทึม

การเข้ารหัส (Encryption)

  1. รับสตริง ใช้แต่ละตัวอักษรค้นหาใน Morse dictionary นำรหัสที่ตรงกันมา
  2. เก็บรหัสไว้ในตัวแปร คั่นแต่ละรหัส Morse ด้วยช่องว่าง 1 ช่อง
  3. คั่นระหว่างคำด้วยช่องว่าง 2 ช่อง

การถอดรหัส (Decryption)

  1. เพิ่มช่องว่างท้ายสตริง
  2. วนลูปอ่านตัวอักษรจนกว่าจะเจอช่องว่าง
  3. เมื่อเจอช่องว่าง ค้นหารหัสใน dictionary เก็บไว้
  4. เมื่อเจอช่องว่าง 2 ช่องติดกัน เพิ่มช่องว่างในข้อความถอดรหัส
  5. ช่องว่างสุดท้าย = ตัวอักษรสุดท้าย

โค้ดตัวอย่างสมบูรณ์

# -*- coding: utf-8 -*-
MORSE_CODE_DICT = {
    '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':'-----',
    ', ':'--..--', '.':'.-.-.-', '?':'..--..', '/':'-..-.',
    '-':'-....-', '(':'-.--.', ')':'-.--.-'
}

def encryption(message):
    cipher = ''
    for letter in message:
        if letter != ' ':
            cipher += MORSE_CODE_DICT[letter.upper()] + ' '
        else:
            cipher += ' '
    return cipher

def decryption(message):
    message += ' '
    decipher = ''
    citext = ''
    
    for letter in message:
        if letter != ' ':
            citext += letter
        else:
            if citext:
                # ค้นหาคีย์จากค่าใน dictionary
                for key, value in MORSE_CODE_DICT.items():
                    if value == citext:
                        decipher += key
                        break
                citext = ''
            else:
                # เจอช่องว่าง 2 ช่องติดกัน = ช่องว่างระหว่างคำ
                decipher += ' '
    return decipher

def main():
    message = "PYTHON-PROGRAM"
    encrypted = encryption(message.upper())
    print("Encrypted:", encrypted)
    
    message = ".--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- -- "
    decrypted = decryption(message)
    print("Decrypted:", decrypted)

if __name__ == '__main__':
    main()

ผลลัพธ์

Encrypted: .--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- -- 
Decrypted: PYTHON-PROGRAM

หมายเหตุ: ฟังก์ชันถอดรหัสในตัวอย่างเดิมมีบั๊ก (ตัวแปร i ไม่รีเซ็ต) โค้ดด้านบนแก้ไขให้ทำงานถูกต้องแล้ว