Python制作摩斯密码翻译器

 更新时间:2021年11月30日 10:17:44   作者:海拥✘  
摩斯密码是一种将文本信息作为一系列通断的音调、灯光或咔嗒声传输的方法,本文将介绍如何通过Python制作摩斯密码翻译器,感兴趣的童鞋可以关注一下

分析

摩斯密码是一种将文本信息作为一系列通断的音调、灯光或咔嗒声传输的方法,无需特殊设备,熟记的小伙伴即可直接翻译。它以电报发明者Samuel F. B. Morse的名字命名。

算法

算法非常简单。英语中的每个字符都被一系列“点”和“破折号”代替,或者有时只是单数的“点”或“破折号”,反之亦然。

加密

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

解密

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

执行

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

摩斯密码对照表

实现代码

# 实现摩斯密码翻译器的 Python 程序
  
'''
VARIABLE KEY
'cipher' -> '存储英文字符串的摩斯翻译形式'
'decipher' -> '存储摩斯字符串的英文翻译形式'
'citext' -> '存储单个字符的摩斯密码'
'i' -> '计算摩斯字符之间的空格'
'message' -> '存储要编码或解码的字符串
'''
  
# 表示摩斯密码图的字典
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] + ' '
        else:
            # 1个空格表示不同的字符
            # 2表示不同的词
            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 = "JUEJIN-HAIYONG"
    result = encrypt(message.upper())
    print (result)

    message = ".--- ..- . .--- .. -. -....- .... .- .. -.-- --- -. --."
    result = decrypt(message)
    print (result)

    message = "I LOVE YOU"
    result = encrypt(message.upper())
    print (result)

    message = "..  .-.. --- ...- .  -.-- --- ..-"
    result = decrypt(message)
    print (result)
   
# 执行主函数
if __name__ == '__main__':
    main()

结果 

.--- ..- . .--- .. -. -....- .... .- .. -.-- --- -. --.

JUEJIN-HAIYONG

..  .-.. --- ...- .  -.-- --- ..-

I LOVE YOU

以上就是Python制作摩斯密码翻译器的详细内容,更多关于Python 摩斯密码翻译的资料请关注脚本之家其它相关文章!

相关文章

  • Flask response响应的具体使用

    Flask response响应的具体使用

    在flask中,想要给前端页面返回数据,必须是Response的对象,本文介绍了Flask response响应的使用,感兴趣的可以了解一下
    2021-07-07
  • python爬虫数据保存到mongoDB的实例方法

    python爬虫数据保存到mongoDB的实例方法

    在本篇文章里小编给大家整理的是一篇关于python爬虫数据保存到mongoDB的实例方法,有需要的朋友们可以参考下。
    2020-07-07
  • python冒泡排序简单实现方法

    python冒泡排序简单实现方法

    这篇文章主要介绍了python冒泡排序简单实现方法,实例分析了Python冒泡排序的简单实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • python ElementTree 基本读操作示例

    python ElementTree 基本读操作示例

    python ElementTree 基本读操作示例
    2009-04-04
  • Python有关Unicode UTF-8 GBK编码问题详解

    Python有关Unicode UTF-8 GBK编码问题详解

    本文主要介绍了Python有关Unicode UTF-8 GBK编码问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Opencv Python实现两幅图像匹配

    Opencv Python实现两幅图像匹配

    这篇文章主要为大家详细介绍了Opencv Python实现两幅图像匹配,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Numpy中np.random.rand()和np.random.randn() 用法和区别详解

    Numpy中np.random.rand()和np.random.randn() 用法和区别详解

    这篇文章主要介绍了Numpy中np.random.rand()和np.random.randn() 用法和区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 使用python itertools实现计算双十一满减凑单

    使用python itertools实现计算双十一满减凑单

    一年一度的双十一又到了,在这样一个日子中,可能遇到一些问题,首先是“凑单”问题,本文将使用python中的itertools库解决这一问题,感兴趣的可以了解下
    2024-11-11
  • Python大数据之从网页上爬取数据的方法详解

    Python大数据之从网页上爬取数据的方法详解

    这篇文章主要介绍了Python大数据之从网页上爬取数据的方法,结合实例形式详细分析了Python爬虫爬取网页数据的相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • Python列表切片常用操作实例解析

    Python列表切片常用操作实例解析

    这篇文章主要介绍了Python列表切片常用操作实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论