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

📅  最后修改于: 2022-05-13 01:55:15.666000             🧑  作者: Mango

Python中的摩尔斯电码翻译器

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

算法

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

加密

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

解密

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

执行:

Python提供了一种称为字典的数据结构,它以键值对的形式存储信息,这对于实现诸如莫尔斯电码之类的密码非常方便。我们可以将莫尔斯电码图表保存在字典中,其中(key-value pairs) => (English Characters-Morse Code) 。明文(英文字符)代替密钥,密文(摩尔斯电码)形成相应密钥的值。可以从字典中访问键的值,就像我们通过索引访问数组的值一样,反之亦然。

Python3
# Python program to implement Morse Code Translator
 
'''
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'
'''
 
# Dictionary representing the morse code chart
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':'-----', ', ':'--..--', '.':'.-.-.-',
                    '?':'..--..', '/':'-..-.', '-':'-....-',
                    '(':'-.--.', ')':'-.--.-'}
 
# Function to encrypt the string
# according to the morse code chart
def encrypt(message):
    cipher = ''
    for letter in message:
        if letter != ' ':
 
            # Looks up the dictionary and adds the
            # corresponding 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
 
# Function to decrypt the string
# from morse to english
def decrypt(message):
 
    # extra space added at the end to access the
    # last morse code
    message += ' '
 
    decipher = ''
    citext = ''
    for letter in message:
 
        # checks for space
        if (letter != ' '):
 
            # counter to keep track of space
            i = 0
 
            # storing morse code of a single character
            citext += letter
 
        # in case of space
        else:
            # if i = 1 that indicates a new character
            i += 1
 
            # if i = 2 that indicates a new word
            if i == 2 :
 
                 # adding space to separate words
                decipher += ' '
            else:
 
                # accessing the keys using their values (reverse of encryption)
                decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT
                .values()).index(citext)]
                citext = ''
 
    return decipher
 
# Hard-coded driver function to run the program
def main():
    message = "GEEKS-FOR-GEEKS"
    result = encrypt(message.upper())
    print (result)
 
    message = "--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... "
    result = decrypt(message)
    print (result)
 
# Executes the main function
if __name__ == '__main__':
    main()


输出:

--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... 
GEEKS-FOR-GEEKS