使用 Python 程序实现摩斯密码翻译器「建议收藏」

作者主页:海拥作者简介:CSDN全栈领域优质创作者、HDZ核心组成员、蝉联C站周榜前十粉丝福利:往期获奖记录每周送6~9本书,不定期送各种小礼品(搪瓷杯、抱枕、鼠标垫、马克杯等)摩斯密码是一种将文本信息作为一系列通断的音调、灯光或咔嗒声传输的方法,无需特殊设备,熟记的小伙伴即可直接翻译。它以电报发明者SamuelF.B.Morse的名字命名。算法算法非常简单。英语中的每个字符都被一系列“点”和“破折号”代替,或者有时只是单数的“点”或“

大家好,又见面了,我是你们的朋友全栈君。

? 作者主页:海拥
? 作者简介:?CSDN全栈领域优质创作者、?HDZ核心组成员、?蝉联C站周榜前十
? 粉丝福利:往期获奖记录 每周送6~9本书,不定期送各种小礼品(搪瓷杯、抱枕、鼠标垫、马克杯等)

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

算法

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

加密

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

解密

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

执行

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

摩斯密码对照表

微信截图_20210729135303.png

# 实现摩斯密码翻译器的 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 程序实现摩斯密码翻译器。我们希望本篇博客能够帮助到您,博主也在学习进行中,如有什么错误的地方还望批评指正。

? 评论区抽粉丝送书啦

? 欢迎大家在评论区提出意见和建议! (抽三位幸运儿送书,实物图如下)?

在这里插入图片描述

《认识编程 以Python语言讲透编程的本质》

【内容简介】

中国早期Java研发工程师之一,JDBCDriver、Minis开发者,Norming软件国际CTO主笔。这本书不同于那些枯燥乏味的编程教程,作者彷佛给我们展开一幅生动的画卷,化繁为简,用深入浅出通俗易懂的语言,引领读者推开编程世界的大门,领略科技的奇妙和程序的精髓。非常有启发性和趣味性。强烈推荐给初入门的广大青少年和有兴趣认识编程的读者们。
  这本书有点像侦探小说,读完后会突然明白为什么在人工智能的大故事中,python能成为新宠,这不是一本简单讲解python语法的书,更能培养你计算机思维,帮助你洞察人工智能算法内在的灵魂。本书的可读性也很强,用词精准而克制,文风婉约而细腻,抽丝剥茧地展示python简洁的语法、丰富的类库、优雅的结构和不可限量的应用。。
  编程的核心技术并不是编程语言本身的掌握,而是编程思维和认知的突破。

也有不想靠抽,想自己买的同学可以参考下面的链接

京东自营购买链接:

《认识编程 以Python语言讲透编程的本质》- 京东图书

? 注意:

大家点赞关注,三天后也就是 12月2日 从评论区留言的同学中抽取三位送书

? 面试题库:Java、Python、前端核心知识点大全和面试真题资料
? 办公用品:精品PPT模板几千套,简历模板一千多套
? 学习资料:2300套PHP建站源码,微信小程序入门资料

如果中奖了联系不上则视为放弃,可以从下方卡片里找到作者的联系方式,每周都会送6-9本书,后面送书力度还会加大,一年送几百上千本不是问题。点此获取 ? 往期获奖记录

公众号【海拥】回复【进群】领书不迷路,群内 每位成员 我都会送一本。回复【资源】可获取上面的资料??????

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129585.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • hive基础总结(面试常用)

    hive基础总结(面试常用)

  • IDEA中Maven依赖包下载不了的问题解决方案汇总「建议收藏」

    IDEA中Maven依赖包下载不了的问题解决方案汇总「建议收藏」这个依赖包下载不了的问题真的是很烦,之前一直把下载不上的依赖剪切再粘贴到pom.xml文件中,保存它就自动下载了,但是今天怎么剪切粘贴都没用,所以就花了点时间在网上各种搜解决方案,试了一些之后终于从根本上解决了问题,所以写个博客把解决这个问题的方案汇总一下!1.先是对图上的两个位置一番狂点进行刷新,然并卵…于是又按照博客上的指示去寻找Settings->Build,Executi…

  • Lua使用心得(2)

    在lua脚本调用中,如果我们碰到一种不好的脚本,例如:while1dodoend那我们的程序主线程也会被阻塞住。那我们如何防止这种问题呢?下面就给出一个解决的办法。首先为了不阻塞主线程,

    2021年12月25日
  • django配置文件详解_pycharm配置python

    django配置文件详解_pycharm配置python前言django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪、错误代码之类的详细信息。log

  • Pycharm中全局查找及替换关键字「建议收藏」

    Pycharm中全局查找及替换关键字「建议收藏」在Pycharm的不同文件中查找或替换某个词。

  • 南大lamda实验室失败面经分享「建议收藏」

    南大lamda实验室失败面经分享「建议收藏」2019年保研基本上尘埃落定,博主最后去了北大信科读研。关于北大的夏令营,把北大往年的夏令营真题刷一刷https://blog.csdn.net/caozixuan98724/article/details/93521208,面试就个凭造化了。值得说的内容不多,反而是最早开始的南大一行,值得说的地方很多,非常有趣,作为我参加的第一个保研面试,跪的一塌糊涂。初审首先先讲lamda实验室的初审…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号