Python制作摩斯密码翻译器

作者:海拥? 时间:2021-06-27 15:27:58 

分析

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

算法

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

加密

  • 在加密的情况下,我们一次一个地从单词中提取每个字符(如果不是空格),并将其与存储在我们选择的任何数据结构中的相应摩斯密码匹配(如果您使用 python 编码,字典可以变成在这种情况下非常有用)

  • 将摩斯密码存储在一个变量中,该变量将包含我们编码的字符串,然后我们在包含结果的字符串中添加一个空格。

  • 在用摩斯密码编码时,我们需要在每个字符之间添加 1 个空格,在每个单词之间添加 2 个连续空格。

  • 如果字符是空格,则向包含结果的变量添加另一个空格。我们重复这个过程,直到我们遍历整个字符串

解密

  • 在解密的情况下,我们首先在要解码的字符串末尾添加一个空格(这将在后面解释)。

  • 现在我们继续从字符串中提取字符,直到我们没有任何空间。

  • 一旦我们得到一个空格,我们就会在提取的字符序列(或我们的莫尔斯电码)中查找相应的英语字符,并将其添加到将存储结果的变量中。

  • 请记住,跟踪空间是此解密过程中最重要的部分。一旦我们得到 2 个连续的空格,我们就会向包含解码字符串的变量添加另一个空格。

  • 字符串末尾的最后一个空格将帮助我们识别莫尔斯电码字符的最后一个序列(因为空格充当提取字符并开始解码它们的检查)。

执行

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

摩斯密码对照表

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

来源:https://blog.csdn.net/qq_44273429/article/details/121606379

标签:Python,摩斯密码,翻译器
0
投稿

猜你喜欢

  • Golang 如何判断数组某个元素是否存在 (isset)

    2024-02-04 17:11:46
  • Python3+Pycharm+PyQt5环境搭建步骤图文详解

    2023-12-17 06:55:01
  • PHP xpath提取网页数据内容代码解析

    2024-06-05 15:39:35
  • Pycharm远程连接服务器并运行与调试

    2021-05-29 04:38:51
  • JS+ASP实现无刷新新闻列表方法

    2007-08-22 12:44:00
  • 小白教程|一小时上手最流行的前端框架vue(推荐)

    2024-04-30 10:34:20
  • vue实现全屏滚动效果(非fullpage.js)

    2024-05-28 15:46:00
  • Python获取当前时间日期的实现示例

    2021-12-26 04:43:21
  • Python实现检测文件的MD5值来查找重复文件案例

    2021-08-14 01:28:02
  • linux 后台日志 mysql 错误异常的解释(推荐)

    2024-01-26 06:01:42
  • Python格式化输出--%s,%d,%f的代码解析

    2022-10-31 06:26:44
  • mssql无数据库日志文件恢复数据库的方法第1/2页

    2024-01-28 16:33:52
  • python实现pptx批量向PPT中插入图片

    2021-10-05 23:18:29
  • Git命令的简单整理大全

    2023-09-22 09:30:52
  • 如何在 Vue 表单中处理图片

    2024-05-02 16:10:08
  • python3使用mutagen进行音频元数据处理的方法

    2023-05-25 04:05:32
  • vue项目中将element-ui table表格写成组件的实现代码

    2024-05-28 15:55:31
  • Python通过命令提示符安装matplotlib

    2022-12-05 01:16:53
  • Pandas数据分析-pandas数据框的多层索引

    2022-11-27 22:25:37
  • Python3安装Pymongo详细步骤

    2021-06-09 10:27:20
  • asp之家 网络编程 m.aspxhome.com