📜  Python中的摩尔斯电码翻译器

📅  最后修改于: 2020-05-14 11:25:52             🧑  作者: Mango

莫尔斯电码是一种将文本信息作为一系列开,关的音调,灯光或咔嗒声进行传输的方法,熟练的听众或观察者无需特殊设备即可直接理解。它以电报的发明者塞缪尔·FB·莫尔斯(Samuel FB Morse)命名。

算法

该算法非常简单。英文中的每个字符都由一系列的“点”和“破折号”代替,有时甚至是单数的“点”或“破折号”,反之亦然。有关详细信息,请参阅此Wikipedia图片

加密

  1. 在加密的情况下,我们一次从一个单词中提取每个字符(如果不是空格),并将其与存储在我们选择的任何数据结构中的相应摩尔斯电码进行匹配(如果您使用Python进行编码,则字典可以变成在这种情况下非常有用)
  2. 将莫尔斯电码存储在一个变量中,该变量将包含我们的编码字符串,然后在该字符串中添加一个空格,其中将包含结果。
  3. 使用摩尔斯电码进行编码时,我们需要在每个字符之间添加1个空格,并在每个单词之间添加2个连续的空格。
  4. 如果字符是空格,则将另一个空格添加到包含结果的变量中。我们重复此过程,直到遍历整个字符串

解密

  1. 在解密的情况下,我们首先在要解码的字符串的末尾添加一个空格(稍后将对此进行解释)。
  2. 现在,我们继续从字符串中提取字符,直到没有任何空格为止。
  3. 一旦获得空格,我们就会在提取的字符序列(或摩尔斯电码)中查找相应的英语字符,并将其添加到将存储结果的变量中。
  4. 请记住,跟踪空间是此解密过程中最重要的部分。一旦获得2个连续的空格,我们将在包含解码字符串的变量中添加另一个空格。
  5. 字符串末尾的最后一个空格将帮助我们识别莫尔斯电码字符的最后一个序列(因为空格可作为提取字符并开始对其进行解码的检查)。

实现

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