📅  最后修改于: 2020-05-14 11:25:52             🧑  作者: Mango
莫尔斯电码是一种将文本信息作为一系列开,关的音调,灯光或咔嗒声进行传输的方法,熟练的听众或观察者无需特殊设备即可直接理解。它以电报的发明者塞缪尔·FB·莫尔斯(Samuel FB Morse)命名。
算法
该算法非常简单。英文中的每个字符都由一系列的“点”和“破折号”代替,有时甚至是单数的“点”或“破折号”,反之亦然。有关详细信息,请参阅此Wikipedia图片。
加密
解密
实现
Python提供了一种称为字典的数据结构,该结构以键值对的形式存储信息,这对于实现密码(例如莫尔斯电码)非常方便。我们可以将莫尔斯电码表保存在字典中,其中(键值对)=>(英语-摩尔斯电码)。明文(英文字符)代替密钥,密文(摩尔斯码)形成相应密钥的值。可以从字典中访问键的值,就像我们通过它们的索引访问数组的值一样,反之亦然。
# 用于实现莫尔斯电码转换器的Python程序
'''
VARIABLE KEY
'cipher' -> 'stores the morse translated form of the english string'
'decipher' -> 'stores the english translated form of the morse string'
'citext' -> 'stores morse code of a single character'
'i' -> 'keeps count of the spaces between morse characters'
'message' -> 'stores the string to be encoded or decoded'
'''
# 字典代表莫尔斯电码表
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 != ' ':
# Looks up the dictionary and adds the
# correspponding morse code
# along with a space to separate
# morse codes for different characters
cipher += MORSE_CODE_DICT[letter] + ' '
else:
# 1 space indicates different characters
# and 2 indicates different words
cipher += ' '
return cipher
# 将字符串从莫尔斯电码解密为英语的功能
def decrypt(message):
# 最后添加额外的空间以访问最后的莫尔斯电码
message += ' '
decipher = ''
citext = ''
for letter in message:
# 检查空间
if (letter != ' '):
# 计数器以跟踪空间
i = 0
# 存储单个字符的摩尔斯电码
citext += letter
# 在空间的情况下
else:
# 如果i = 1表示一个新字符
i += 1
# 如果i = 2表示一个新词
if i == 2 :
# 添加空格以分隔单词
decipher += ' '
else:
# 使用其值访问密钥(反向加密)
decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT
.values()).index(citext)]
citext = ''
return decipher
# 硬编码的驱动程序函数来运行程序
def main():
message = "GEEKS-FOR-GEEKS"
result = encrypt(message.upper())
print (result)
message = "--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... "
result = decrypt(message)
print (result)
# 执行主要函数
if __name__ == '__main__':
main()
输出:
--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ...
GEEKS-FOR-GEEKS