代码地址如下:
http://www.demodashi.com/demo/14743.html

####详细说明:
现在这年头谍战片、警匪片动不动就用摩斯密码来传递信息,一方面可以用来耍帅,另外一方面好像不插入这样子一个情节就
显得不够专业了;那么摩斯密码(实际上应该是摩斯电码,但是不少人都喜欢把它叫做摩斯密码,这样比较有神秘感,显得高大上。)究竟是什么呢?一个不专业但是很直观的解释就是:摩斯电码是用点".“和横”-"的不同组合来表示数字和字母。
具体一点就是下图那样:

看,就是这么简单!
什么?记不住?没关系,有人总结出了一些规律来帮助记忆,
如下图:

如果你还是记不住,但是又想用拿它来发一下信息、玩一下,那你可以
自己写一个摩斯电码的解码、编码器呀。
本项目只需用到一个用于写GUI界面的第三方库wx,除去空行和注释,一共不到200行代码。
(代码在python2.7或python3.6下均能正常运行,已在以下环境中进行过测试:
python2.7 +wx2.8; python3.6 + wx4.0)
这个简易的摩斯电码编码/解码器如下:

####项目结构图:
整体的项目结构十分简单,只有一个脚本文件,另外一个是根据脚本进行编译后的windows系统下的可执行程序,用户的机器甚至无需python环境便可使用,即装即用。
如下:

####准备工作:
安装必要的第三方库:

 pip install wxPython

####实现过程的部分代码展示

  1. 摩斯电码表实际上就是一本字典,字符\数字和电码(点划)有着一一对应的关系,
    在python中用dict来构建十分方便。
    比如,你可以用以下的方式规规矩矩地构建一个摩斯电码表.
CODE = {'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': '--..','0': '-----',  '1': '.----',  '2': '..---','3': '...--',  '4': '....-',  '5': '.....','6': '-....',  '7': '--...',  '8': '---..','9': '----.'}

你也可以用下面的方式来构建字典,

Keys = 'abcdefghijklmnopqrstuvwxyz0123456789'
Values = ['.-','-...','-.-.','-..','.','..-.','--.','....','..','.---','-.-','.-..','--','-.','---','.--.','--.-','.-.','...','-', '..-','...-','.--','-..-','-.--','--..','-----','.----','..---','...--','....-','.....','-....','--...','---..','----.']
CODE = dict(zip(Keys.upper(), Values))

然后是导入相关的库:

import wx
import os
from wx.lib.wordwrap import wordwrap
import  wx.lib.dialogs

只用到一个第三方库:wxPython,该库用于编写程序的GUI.
2.编写界面:

class MainWindow(wx.Frame):def __init__(self,parent,title):wx.Frame.__init__(self,parent,title=title,size=(800,400))font = wx.Font(15, wx.SWISS, wx.NORMAL, wx.NORMAL)self.contents = wx.TextCtrl (self,style=wx.TE_MULTILINE | wx.HSCROLL )self.contents.SetBackgroundColour((80,180,30))self.coder = wx.TextCtrl (self,style=wx.TE_MULTILINE | wx.HSCROLL )self.coder.SetBackgroundColour((20,200,100))self.msgFont = self.contents.GetFont()self.msgColour = wx.BLACKself.contents.SetFont(font)self.coderFont = self.coder.GetFont()self.coderColour = wx.BLACKself.coder.SetFont(font)self.findData = wx.FindReplaceData()"""创建状态栏"""self.CreateStatusBar()   """file菜单布局"""filemenu = wx.Menu()menuNew = filemenu.Append(wx.ID_NEW  ,"&New\tCtrl+N","New a file 新建")menuOpen = filemenu.Append(wx.ID_OPEN ,"&Open\tCtrl+O","Open a file 打开")menuSave = filemenu.Append(wx.ID_SAVE  ,"&Save\tCtrl+S","Save the file 保存")"""菜单分隔线"""filemenu.AppendSeparator()   menuExit = filemenu.Append(wx.ID_EXIT   ,"E&xit\tCtrl+Q","Tenminate the program 退出")"""格式菜单布局"""formatmenu = wx.Menu ()menuMsgFont = formatmenu.Append(wx.ID_ANY ,"&msg Font","Set the message font 设置输入字体")menuCoderFont = formatmenu.Append(wx.ID_ANY ,"&coder Font","Set the coder font 设置输出字体")        """帮助菜单布局"""helpmenu = wx.Menu ()menuhelpdoc = helpmenu.Append(wx.ID_ANY ,"usage\tF1","usage 使用说明")"""菜单栏布局"""menuBar = wx.MenuBar ()menuBar.Append(filemenu,"&File")menuBar.Append(formatmenu,"&Setup")menuBar.Append(helpmenu,"&Help")self.SetMenuBar(menuBar)"""创建按钮"""        encoderButton = wx.Button (self,label = 'Encode')decoderButton = wx.Button (self,label = 'Decode')"""函数绑定"""self.Bind(wx.EVT_MENU,self.OnExit,menuExit)self.Bind(wx.EVT_MENU,self.OnOpen,menuOpen)self.Bind(wx.EVT_MENU,self.OnSave,menuSave)self.Bind(wx.EVT_MENU,self.OnNew,menuNew)self.Bind(wx.EVT_MENU,self.OnSelectFont,menuMsgFont)self.Bind(wx.EVT_MENU,self.OnSelectCoderFont,menuCoderFont)self.Bind(wx.EVT_MENU,self.Onhelpdoc,menuhelpdoc)self.Bind(wx.EVT_BUTTON,self.Encode,encoderButton)self.Bind(wx.EVT_BUTTON,self.Decode,decoderButton)        """布局"""self.sizer0 = wx.BoxSizer (wx.HORIZONTAL )self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)self.sizer2.Add(encoderButton, 1, wx.EXPAND)self.sizer2.Add(decoderButton, 1, wx.EXPAND)self.sizer = wx.BoxSizer(wx.VERTICAL)self.sizer.Add(self.sizer0, 0, wx.EXPAND)self.sizer.Add(self.contents, 1, wx.EXPAND)self.sizer.Add(self.coder, 1, wx.EXPAND)self.sizer.Add(self.sizer2, 0, wx.EXPAND)self.SetSizer(self.sizer)self.SetAutoLayout(1)self.sizer.Fit(self)"""显示布局"""self.Show(True)

3.接下来编写各种回调函数,
有时候信息太长,不好一一输进输入框,也懒得复制粘贴,
因此可以写一个函数用以打开文本:

    """Open 函数"""def OnOpen(self,event):self.dirname=''dlg = wx.FileDialog(self,"choose a file",self.dirname,"","*.*",wx.FD_DEFAULT_STYLE ) if dlg.ShowModal()==wx.ID_OK :self.filename = dlg.GetFilename()self.dirname = dlg.GetDirectory()f = open(os.path.join(self.dirname,self.filename),'r')self.contents.SetValue(f.read())f.close()dlg.Destroy()

与之类似,可以编写一个用以保存编码/解码信息的函数.

摩斯电码的点和划有时候看上去好像是字符画,
因此可以写一个设置字体大小、样式和颜色的函数.

    """设置contents字体 """def OnSelectFont(self, evt):msg = self.contents.GetValue()data = wx.FontData()data.EnableEffects(True)data.SetColour(self.msgColour)         # set colourdata.SetInitialFont(self.msgFont)dlg = wx.FontDialog(self, data)if dlg.ShowModal() == wx.ID_OK:data = dlg.GetFontData()font = data.GetChosenFont()colour = data.GetColour()self.msgFont = fontself.msgColour = colourself.contents.SetFont(self.msgFont)self.contents.SetForegroundColour(self.msgColour)dlg.Destroy()

4.编写解码函数将输入的摩斯电码转为数字和字符:

    def Decode(self,event):Decode_value = CODE.keys()Decode_key = CODE.values()Decode_dict = dict(zip(Decode_key,Decode_value))msg = self.contents.GetValue()self.coder.Clear()msg1 = msg.split()text = []for str in msg1:if str in Decode_dict.keys():text.append(Decode_dict[str])self.coder.write("%s " % (text))

与之类似,参考可以编码函数编写一个编码函数将输入的字符和数字转为摩斯电码.

python实现的摩斯电码解码\编码器

代码地址如下:
http://www.demodashi.com/demo/14743.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

python实现的摩斯电码解码\编码器相关推荐

  1. Morse(摩斯电码)加解密实现(python)

    原理 摩斯电码是一种通信方法,它使用点和划的组合来表示字母.数字和符号.点是短脉冲,划是长脉冲,它们之间需要有一个短暂的间隔,而字符之间需要有一个较长的间隔.通过听觉或视觉方式解码摩斯电码可以识别字符 ...

  2. Python 算法训练之摩斯电码

    摩斯电码 摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母.数字和标点符号.它发明于1837年,发明者有争议,是美国人塞缪尔·莫尔斯或 ...

  3. 摩斯电码php源码,利用PHP怎么编写一个摩斯电码生成器

    利用PHP怎么编写一个摩斯电码生成器 发布时间:2020-12-15 16:16:54 来源:亿速云 阅读:78 作者:Leah 这篇文章给大家介绍利用PHP怎么编写一个摩斯电码生成器,内容非常详细, ...

  4. 用matlab打造的摩斯电码加解码器音频版,支持包括中文在内的任意字符

    摩斯电码想必不少伙伴都很熟悉吧,通过简单的长短组合就能把信息编码传递出去,比如声音的长短.灯亮灯的长短等等.虽然现在是信息时代,但摩斯电码这种优雅简介的编码方式依然不过时,甚至在某些关键的场合还能救人 ...

  5. 刷题记录——摩尔斯电码解码(被坑惨了)

    使用Python解题逻辑正确但是不AC 测试用例有错误(没有考虑int越界,计算出来错误结果作为测试答案) 题目链接 https://www.nowcoder.com/practice/592a069 ...

  6. 用摩斯电码通关《黑暗之魂3》!up主自制奇葩手柄,连育碧都找上门合作

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI <黑暗之魂3>,一款以玩家受苦为核心卖点全球玩家死亡上亿次的高难动作游戏. 随手打开直播,就可以欣赏到人类受难现场大放送: 但现 ...

  7. 彩色?翅膀?摩斯电码?让你拥有独一无二的微信昵称!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 今天来给大家分享一些超级有意思的微信小技巧,可以说学会了 ...

  8. 开源 | 无线电 | 摩斯电码CW发报练习器

    屏幕的右边有目录哦,可以直接点击各章节查看(开源代码在文末) 直接上图 开源协议 与原作相同的GPL 2.0 鸣谢 原作者主页链接:bilibili 原作开源链接:Bilibili 和 github ...

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

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

最新文章

  1. windows8下安装Visual Studio2008
  2. 安卓手机可以连接斑马系统吗_Zebra斑马 StageNow 安卓系统移动设备快速部署工具...
  3. springmvc教程(3)
  4. word多出空标题,样式是列出段落 - -显示时,选择不勾选“隐藏文字”
  5. CSS3过渡属性transition详解
  6. php getid3,PHP getID3类的使用方法学习笔记【附getID3源码下载】
  7. [html] html的属性值有规定要使用单引号还是双引号吗?
  8. LeetCode 1504. 统计全 1 子矩形(记录左侧的连续1的个数)
  9. k8s mysql 弹性_kubernetes云平台管理实战:k8s弹性伸缩(十八)
  10. 计算机等级报考备注填什么用,计算机二级有什么用
  11. Tensorflow GAN对抗生成网络实战
  12. python中capitalize()函数的用法
  13. 金山视频云推出QUIC+,畅快直播再升级
  14. 保研计算机三级,保研干货 | 这些证书手中有,凡尔赛路任你走
  15. 自定义Tab切换+自定义CheckBox+light7无限滑动/下拉刷新
  16. 教老婆学java系列之奇妙的数据结构四
  17. 驰骋工作流引擎-督查督办系统
  18. 中职学生计算机学情分析报告,中职学生学情分析及对策
  19. mysql停电_MySQL断电后报错处理
  20. 学习笔记(2):8小时学会HTML网页开发-网页布局之切切豆腐

热门文章

  1. AD19无法生成PCB_对PCB印制线的传输线效应以及封装、连接器和电缆的频率响应进行全面分析...
  2. ppt怎么无边距打印 wps_为什么用WPS的同事总是比你早下班?
  3. 【C语言】一维数组排序(函数,数组和循环结构语句)
  4. war压缩命令_BetterZip mac版(超强解压缩软件)
  5. proc源码解析(一)--proc文件系统的内容
  6. java 如何结束线程_java中,如何安全的结束一个正在运行的线程?
  7. linux收集完整技术支持信息的命令有,Linux下常用的日志收集命令(RedhatSuSe)
  8. 【JUC】第三章 多线程锁、CallableFuture 接口
  9. 【LeetCode】剑指 Offer 17. 打印从1到最大的n位数
  10. 【重难点】【Java基础 07】变量类型、内部类、处理器指令优化