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
投稿

猜你喜欢

  • python爬虫实战之最简单的网页爬虫教程

    2022-02-06 17:03:36
  • 20行python代码的入门级小游戏的详解

    2023-07-15 01:25:31
  • 用户体验之网页板块设计

    2011-05-14 16:41:00
  • python实现从文件中读取数据并绘制成 x y 轴图形的方法

    2023-04-09 22:43:41
  • Python实现弹球小游戏的示例代码

    2022-12-15 18:09:07
  • asp.net aspnetpager分页统计时与实际不符的解决办法

    2023-06-30 04:02:32
  • python 接收处理外带的参数方法

    2022-05-01 17:56:26
  • Python高级特性 切片 迭代解析

    2022-03-28 14:32:49
  • Oracle平台应用数据库系统的设计与开发

    2010-07-21 13:03:00
  • python快速编写单行注释多行注释的方法

    2022-06-04 07:06:54
  • python匿名函数的使用方法解析

    2022-05-08 13:00:25
  • Python使用PyYAML库读写yaml文件的方法

    2021-03-26 03:53:32
  • python manim实现排序算法动画示例

    2021-11-10 10:41:58
  • python实现简单石头剪刀布游戏

    2023-03-08 03:23:44
  • 浅析Windows 嵌入python解释器的过程

    2023-01-26 11:43:28
  • 90行Python代码开发个人云盘应用

    2021-12-17 13:44:12
  • 在VSCode中配置PHP开发环境的实战步骤

    2023-06-06 02:13:06
  • Pycharm配置opencv与numpy的实现

    2021-09-19 08:20:55
  • PyTorch一小时掌握之迁移学习篇

    2021-12-13 12:37:11
  • 如何随机显示图片计数器?

    2010-05-16 15:21:00
  • asp之家 网络编程 m.aspxhome.com