Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Bộ dịch mã Morse trong Python

Morse Code chuyển đổi chữ cái/số thành chuỗi dấu chấm (.), gạch ngang (-), dấu cách. Dùng trong mật mã học, truyền thông.

Bảng mã Morse

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

Thuật toán

Mã hóa: Mỗi ký tự → mã Morse, cách nhau 1 khoảng trắng. Giữa từ cách 2 khoảng trắng.

Giải mã: Đọc chuỗi Morse, tách theo khoảng trắng, tra ngược từ điển. 2 khoảng trắng liên tiếp = khoảng trắng giữa từ.

Code hoàn chỉnh

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 encrypt(message):
    cipher = ''
    for letter in message:
        if letter != ' ':
            cipher += MORSE_CODE_DICT[letter.upper()] + ' '
        else:
            cipher += ' '
    return cipher

def decrypt(message):
    message += ' '
    decipher = ''
    citext = ''
    for letter in message:
        if letter != ' ':
            citext += letter
        else:
            if citext:
                decipher += list(MORSE_CODE_DICT.keys())[
                    list(MORSE_CODE_DICT.values()).index(citext)]
                citext = ''
            decipher += ' '
    return decipher.strip()

# Test
msg = "PYTHON-PROGRAM"
enc = encrypt(msg)
print(enc)   # .--. -.-- - .... --- -. -....- .--. .-. --- --. .-. .- --
print(decrypt(enc))  # PYTHON-PROGRAM

Ứng dụng

  • Giáo dục: học mã hóa cơ bản.
  • Embedded: truyền tín hiệu LED/buzzer.
  • Game, puzzle, CTF.