你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
首页
热门
推荐
精选
登录
|
注册
python实现的摩斯电码解码\编码器
立即下载
用AI写一个
金额:
6
元
支付方式:
友情提醒:源码购买后不支持退换货
立即支付
我要免费下载
发布时间:2018-12-25
18人
|
浏览:6850次
|
收藏
|
分享
技术:python
运行环境:python2.7/3.6 + wx
概述
用200行python代码实现一个带GUI界面的摩斯电码的解码\编码器。
详细
####详细说明: 现在这年头谍战片、警匪片动不动就用摩斯密码来传递信息,一方面可以用来耍帅,另外一方面好像不插入这样子一个情节就 显得不够专业了;那么摩斯密码(实际上应该是摩斯电码,但是不少人都喜欢把它叫做摩斯密码,这样比较有神秘感,显得高大上。)究竟是什么呢?一个不专业但是很直观的解释就是:摩斯电码是用点"."和横"-"的不同组合来表示数字和字母。 具体一点就是下图那样: ![num2code](/contentImages/image/20181224/NUAEos9CjYcl5OAJGvn.jpg "num2code") ![str_code](/contentImages/image/20181224/b2QhaA0igGIjyU86ioQ.jpg "str_code") 看,就是这么简单! 什么?记不住?没关系,有人总结出了一些规律来帮助记忆, 如下图: ![memory](/contentImages/image/20181224/7BACOl3f68exnmJfW2x.jpg "memory") 如果你还是记不住,但是又想用拿它来发一下信息、玩一下,那你可以 自己写一个摩斯电码的解码、编码器呀。 本项目只需用到一个用于写GUI界面的第三方库wx,除去空行和注释,一共不到200行代码。 (代码在python2.7或python3.6下均能正常运行,已在以下环境中进行过测试: python2.7 +wx2.8; python3.6 + wx4.0) 这个简易的摩斯电码编码/解码器如下: ![run](/contentImages/image/20181224/dFQEWsDmxI23M2qauAM.gif "run") ####项目结构图: 整体的项目结构十分简单,只有一个脚本文件,另外一个是根据脚本进行编译后的windows系统下的可执行程序,用户的机器甚至无需python环境便可使用,即装即用。 如下: ![项目结构图](/contentImages/image/20181224/VbWRWlI0UtiueHMg9RL.jpg "项目结构图") ####准备工作: 安装必要的第三方库: 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.BLACK self.contents.SetFont(font) self.coderFont = self.coder.GetFont() self.coderColour = wx.BLACK self.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 colour data.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 = font self.msgColour = colour self.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)) ``` 与之类似,参考可以编码函数编写一个编码函数将输入的字符和数字转为摩斯电码.
本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
感谢
0
手机上随时阅读、收藏该文章 ?请扫下方二维码
相似例子推荐
评论
作者
wellenwoo
7
例子数量
621
帮助
72
感谢
评分详细
可运行:
4.5
分
代码质量:
4.5
分
文章描述详细:
4.5
分
代码注释:
4.5
分
综合:
4.5
分
作者例子
用python实现的的手写数字识别器
Python 实现的猫脸识别、人脸识别器。
Python 实现的、带GUI界面的词云生成器
python实现的电影票房数据可视化
python实现的、带GUI界面电影票房数据可视化程序
python实现的摩斯电码解码\编码器
python实现基于SVM的手写数字识别器