在练习日4中,小鱼给大家讲述了神秘的ASCII码编译及解密过程. 在ASCII码中,字符与十进制数字的互相转换是通过 ord()函数和chr()函数。

今天小鱼要给大家介绍另一种在影视剧、侦探小说中更是鼎鼎大名的密码--摩斯密码。

莫斯密码,英文叫做Morse code,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。

摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种: 点、划、点和划之间的停顿、每个字符之间短的停顿、每个词之间中等的停顿以及句子之间长的停顿。下图为摩斯密码对照表:

现在我们将26个英文字母对应摩斯密码表,如下:

[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]

我们再将26个英文字母对应的写到一个字符串中:

"abcdefghijklmnopqrstuvwxyz"

我们来试一试吧!

小鱼提示:

在摩斯密码中,编译、解密的过程就是索引指令中字母在字母表中的对应位置,根据这个位置索引在摩斯密码表中的对应位置。

第一步,我们把每一个单词从单词列表中取出来,使用 遍历 基础代码块。

第二步,把每一个单词中的字母在字母串中所对应的位置取出来,定义为word_index,对应letter_str.index(r)。

第三步,根据位置信息,再到摩斯密码表中取出来它的密码。

第四步,把最终的密码拼接起来,打印出来即可。

补充知识:index()

Python index() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。

str.index(str, beg=0, end=len(string))str -- 指定检索的字符串

beg -- 开始索引,默认为0。

end -- 结束索引,默认为字符串的长度。

index( )相当于索引功能的反向操作:索引是根据位置找元素,而index( )是根据元素找位置。

解题方法:

morse_code_list = [".-","-...","-.-.","-..",".","..-.",

"--.","....","..",".---",

"-.-",".-..","--","-.","---",".--.",

"--.-",".-.","...","-","..-","...-",

".--","-..-","-.--","--.."]

letter_str = "abcdefghijklmnopqrstuvwxyz"

word_list = ["abc", "cba"]

result = ""

for i in word_list:

for r in i:

# 取出来每一个字母在letter_str中的位置,根据元素找位置,用Index()

word_index = letter_str.index(r)

# 根据取出来的位置,从morse_code_list获取到摩斯密码值,根据位置找元素,用索引

morse_code = morse_code_list[word_index]

result = result + morse_code + "|"

# 打印结果

print(result)

在ASCII码和摩斯密码的转化过程中,核心点在于它们都存在转换的逻辑也就是编译、解密遵循的规则。

在ASCII码中,这个规则 ord()函数和chr()函数,只要有指令,就可以把指令拆分,并逐一通过函数进行转换。

在摩斯密码中,这个规则就是索引指令中字母在字母表中的对应位置,根据这个位置索引在摩斯密码表中的对应位置。这与ASCII码的规则是有本质不同的。

因此,当规则遵循位置对应时,我们应该想到列表的定义:一系列按照特定顺序排列的元素的数据类型。利用列表元素的索引来实现需求。

也由此我们可以抽取 根据 一个元素的在某个列表(这个列表中必须包含这个元素)的索引位置 对应到另一个列表(这个列表中不一定包含这个元素)元素 的基础代码块。

一个元素: r

列表1=['abckdahfsdl r ksdf']

列表2=[123413534523451341341]

对应位置=列表1.index(r) #根据元素找位置,用Index()

所求元素=列表2[对应位置] #根据位置找元素,用索引

听完小鱼的介绍,是不是觉得摩斯密码也很简单呢?

相信你已经能编译和解密出摩斯密码,成为一个特工了。快试试吧。

python find函数 和index的区别_【全网最简单Python教程】--10.列表元素的索引和返回索引值(Index函数使用)...相关推荐

  1. python中if和elif的区别_浅谈对python中if、elif、else的误解

    今天下午在练习python时用了"if...if...else..."的分支结构,结果运行出来吓我一跳.原来我想当然的认为"if...if...else..." ...

  2. C语言函数指针和返回指针值的函数

    一.用函数指针变量调用函数 一个函数,在编译的时候 ,系统会给这个函数分配一个入口地址,这个入口地址就称为函数的指针(地址).既然有地址,那么我们可以定义一个指针变量指向该函数,然后,我们就可以通过该 ...

  3. python for和while的用法区别_详解python while 函数及while和for的区别

    1.while循环(只有在条件表达式成立的时候才会进入while循环) while 条件表达式: pass while 条件表达式: pass else: pass 不知道循环次数,但确定循环条件的时 ...

  4. python列表所有元素平均值_【全网最简单Python教程】--10.列表元素的索引和返回索引值(Index函数使用)...

    在练习日4中,小鱼给大家讲述了神秘的ASCII码编译及解密过程. 在ASCII码中,字符与十进制数字的互相转换是通过 ord()函数 和 chr()函数. 今天小鱼要给大家介绍另一种在影视剧.侦探小说 ...

  5. range函数python2和3区别_【后端开发】range函数python2和3区别

    range函数是一个用来创建算数级数序列的通用函数,返回一个[start, start + step, start + 2 * step, ...]结构的整数序列: py2中的range()函数用法: ...

  6. 语法和c区别_【20200925】Python基本语法

    介绍 介绍 Python这种脚本语言福哥已经给大家介绍过了,现在童鞋们应该已经会安装python的开发环境了,接下来我们需要针对python语言进行一个系统的学习. 首先学习一门编程语言最先要学习的是 ...

  7. python爬虫进程和线程的区别_熬了两个通宵写的!终于把多线程和多进程彻底讲明白了!...

    我们知道,在一台计算机中,我们可以同时打开许多软件,比如同时浏览网页.听音乐.打字等等,看似非常正常.但仔细想想,为什么计算机可以做到这么多软件同时运行呢?这就涉及到计算机中的两个重要概念:多进程和多 ...

  8. python数字类型的分类和区别_讨论python的数据类型的区别

    python很重要的的那几个数据类型:字符串,列表,字典,元组,他们之间重要的区别的是什么?能否举几个例子来说明下! 共同点: 1.它们都是py的核心类型,是py语言自身的一部分. 核心类型与非核心类 ...

  9. python创建字典和包的区别_[Python]-10-模块与包

    引言 这篇文章介绍python中模块和包的概念. 文章目录 0×1.如何导入模块 简单的讲,模块就是可以扩展python功能的一些对象的集合,可以是类,方法,或者简单的数值对象,他们被存放在一个或多个 ...

最新文章

  1. python字符串和字典
  2. 【科普】Web(瓦片)地图的工作原理
  3. 大量更新后数据膨胀_段合并的原理探寻
  4. c语言int 转bool_C++代码实现逆波兰式_C 语言
  5. linux go missing git command,安装beego出现go: missing Git command
  6. 原始图像扩展_Resize Sense for Mac(图像处理软件)
  7. Nginx (Install)
  8. 电商网站商品图片放大镜实现
  9. 解码器输出PSNR为0表示什么
  10. cad导出pdf_CAD如何批量导出PDF文件?别说PDF了!GIF我都能给你导出来
  11. Docker的概念及基本指令学习(从安装、管理、核心概念到docker file 、 服务编排、集群)
  12. 计算机错误1327,Win7系统电脑安装软件失败并提示错误1327解决办法
  13. java 银行卡号_java银行卡号判断银行
  14. KALI 2020.4 搭建双网卡渗透环境
  15. 听说学习是件苦差事——Linux第一天
  16. ARM模拟器-skyeye(天目)的安装和使用!
  17. Web 动画帧率(FPS)计算
  18. androidfilehost.com下载方法
  19. 【苦练基本功】代码整洁之道 pt2(第4章-第6章)
  20. 计算机安全原理与实践第三版答案,计算机安全: 原理与实践 : 第3版

热门文章

  1. 006_全局异常处理器
  2. 006_JavaScript注释
  3. 033_CSS相对定位
  4. Java十个数比大小循环_java for循环完成输出(1,1,2,3,5,8,13,21,34...)求出第10个数是多少?...
  5. android viewflipper图片轮播,使用ViewFlipper实现图片轮播
  6. python绘制三维地形shade(vert_exag)参数_Python的地形三维可视化Matplotlib和gdal使用实例...
  7. wireshark读写pcap文件_PCAP-file-analysis 利用wireshark捕获tcp ip数据包和pcap文件分析 - 下载 - 搜珍网...
  8. 第二章: ORacle 自带用户讲解、oracle的开发工具、oracle客户端的配置、以及常见连接报错
  9. 如何查linux系统安装时间查询,Linux系统怎样查询当前的系统时间
  10. html怎么设置页面自适应屏幕大小,网页设计设置页面自适应屏幕宽度