文章目录

  • 前言
  • 一、题目说明
  • 二、代码展示
  • 三、代码分析
    • 1. str.maketrans()
    • 2. 以二进制位基数格式化输出
  • 四、总结

前言

前一段时间逛checkio,又发现一个有意思的题,是关于摩尔斯电码的。其实题本身素质一般,只是看到一个大佬的解法,真是让我大开眼界,学了很多。

一、题目说明

题目要求很简单,将一段时间格式的字符串转换为摩尔斯密码,转换规则见下图:

每一位都由不同长度的小球表示,灰色小球表示1,也就是True,白色球表示0,也就是False。不同的长度对应的数字分别是2的n次方:1, 2, 4, 8。
最后,1用-替换,0用.替换,连接起来就是一段摩尔斯密码了。
例如,“10 : 37 : 49”,可以用"01 0000 :011 0111 : 100 1001"表示,再转换一下,就是".- … : .-- .— : -… -…-"。
如果某一位只有一位数字,用0补齐,例如" 11 : 1 : 12"要转换为"11 : 01 : 12"。
好了,有关题目的介绍就到这里了,大家要不要试着编写一下函数,实现任意时间字符串的转换!

二、代码展示

下面直接展示一个我认为比较厉害的代码,也是网站获赞比较高的:

TO_MORSE = str.maketrans('01', '.-')def to_morse(number, bits):"""Return number in binary-Morse as a string with the given number of bits."""return "{0:0{1}b}".format(number, bits).translate(TO_MORSE)def to_code(field):"""Return a space-delimited string of binary-Morse digits."""tens, ones = divmod(int(field), 10)return "{} {}".format(to_morse(tens, 3), to_morse(ones, 4))def checkio(data):"""Return a string representing the time in a Morse code-like form."""return ' : '.join(map(to_code, data.split(':')))[1:] # Strip leading .if __name__ == '__main__':    assert checkio("10:37:49") == ".- .... : .-- .--- : -.. -..-", "First Test"assert checkio("21:34:56") == "-. ...- : .-- .-.. : -.- .--.", "Second Test"assert checkio("11:10:12") == ".- ...- : ..- .... : ..- ..-.", "Third Test"assert checkio("23:59:59") == "-. ..-- : -.- -..- : -.- -..-", "Fourth Test"

三、代码分析

1. str.maketrans()

此函数实现字符串之间的相互转换,类似replace,区别是可以一次转换多个字符,需要借助translate()方法。用法如下:

>>> intab = "aeiou"
>>> outtab = "12345"
>>> test = "this is a test string"
>>> trans = str.maketrans(intab, outtab)
>>> result = test.translate(trans)
>>> print(result)
th3s 3s 1 t2st str3ng

2. 以二进制位基数格式化输出

另一个巧妙的方法是,通过"{0:0{1}b}".format(number, bits)"直接快速的以二进制形式输出了0,1格式的字符串。


四、总结

这个题自认为不是很难,怎奈自己没有想到最重要的二进制格式化输出,导致走了弯路。因此在此记录,与大家一同分享一下。

python解决摩尔斯电码相关推荐

  1. Python实现摩尔斯电码和英文互译

    前段时间看到了一个科普摩尔斯电码的博客,感觉挺好玩的,就想着写一个翻译摩尔斯电码的小程序,懒了好几天了,一直没写,今天终于完成了 代码如下 code_dict = {'A': '.-', 'B': ' ...

  2. 牛逼了!用Python实现摩尔斯电码翻译器,网友:“怎么敲我爱你?”

    莫尔斯电码是一种将文本信息作为一系列开,关的音调,灯光或咔嗒声进行传输的方法,熟练的听众或观察者无需特殊设备即可直接理解.它以电报的发明者塞缪尔·FB·莫尔斯(Samuel FB Morse)的名字命 ...

  3. 摩尔斯电码_摩尔斯电码二叉树和baader meinhof现象

    摩尔斯电码 The other night I was watching some videos by 2 Youtube channels I really like. The first one ...

  4. 摩尔斯电码转换python编码_Morse Code 用Python做个摩斯密码转换器

    摩斯密码摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母.数字和标点符号,不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种 ...

  5. 摩尔斯电码转换python编码_摩尔斯电码到英文python3

    我想用Python 3将摩尔斯电码转换成英文 我已经设法使用这个将英语转换成莫尔斯码 http://code.activestate.com/recipes/578407-simple-morse-c ...

  6. 摩尔斯电码转换python编码_python转换字符串为摩尔斯电码的方法

    python转换字符串为摩尔斯电码的方法 本文实例讲述了python转换字符串为摩尔斯电码的方法.分享给大家供大家参考.具体实现方法如下: chars = ",.0123456789?abc ...

  7. 摩尔斯电码转换的小程序【python编写】

    摩尔斯电码转换的小程序 博主是一个刚刚接触生信的新手,正在学习Linux和Python,平时会发布一些自己练手的脚本,用来记录自己的学习之路. 介绍 下面是一个用python写的进行英语和摩尔斯电码转 ...

  8. 利用python实现将文本、摩尔斯电码与用滴答表示的摩尔斯电码三者相互转换

    文章目录 目录 前言 一.摩尔斯电码的对照表: 二.python代码的完整展示 三.代码运行结果的展示: 四.总结与注意事项 前言 本文的代码主要通过字典与反转字典,实现摩尔斯电码与文本的相互转换,并 ...

  9. python字典表示摩尔斯电码_python转换字符串为摩尔斯电码的方法

    本文实例讲述了python转换字符串为摩尔斯电码的方法.分享给大家供大家参考.具体实现方法如下: chars = ",.0123456789?abcdefghijklmnopqrstuvwx ...

最新文章

  1. TPAMI 2022 | 国防科大等高校提出光场解耦机制,在超分辨与视差估计任务上取得优异性能...
  2. C运行时库和标准C++库
  3. 【Python】Matplotlib 可视化必备神书,附pdf下载
  4. golang grpc demo
  5. C语言多维数组与多级指针
  6. NumPy 秘籍中文第二版·翻译完成
  7. 【钉钉PC】PC端钉钉清除缓存
  8. JavaScript(js)概述和使用
  9. 9.20PMP每日一题
  10. 机器学习基础(二十一)—— 分类与回归、生成模型与判别模型
  11. 张云飞 201771010143 《面对对象程序设计(java)》第十七周学习总结
  12. easyui datagrid 动态绑定列
  13. 组态软件mcgs入库mysql_MCGS组态软件实现数据报表
  14. 如何解密网易ncm/qq音乐的qmcflac/酷狗kgm等加密格式转换成MP3
  15. QT学习回顾(二)界面布局及其控件设计
  16. selenium滑块操作(基础)
  17. RocketMQ 监控平台搭建与项目引入
  18. 回忆我的过去一年2020年考研以及研究生规划
  19. linux安装frps服务,ubuntu搭建frps服务
  20. 分页封装实用工具类及其使用方法

热门文章

  1. 不吉利的日期(PAT)
  2. shell迷你版监控脚本
  3. java8三次分组_Java8分组(groupingBy)
  4. R语言数据可视化之折线图、堆积图、堆积面积图
  5. 商务电话拨号项目总结
  6. JSD-2204-(业务逻辑开发)-开发分类功能-分页查询-Day08
  7. 什么是PV、UV和PR值
  8. 什么是PV,UV,PR值
  9. Selenium WebDriver ie,chrome 驱动
  10. PyTorch——自注意力(self-attention)机制实现(代码详解)