最近有一段时间了解了一下摩尔斯电码,感觉十分的好玩,可是想要发电报还得考无线电证书,然后还要买各种设备,想了一想还是算了,为这玩意花太多心思不太实际。

可是我却找到了一个好网站,它可以通过摩尔斯电码在那上面交流,网址是:http://morsecode.me/?room=5。不过我的技术太菜了,发个电报太费劲,看着各位大佬在那里发着电报,那速度简直了,我心中便有了一个想法:实力不行,那就自己写个程序帮我实现吧。结果没多久就搞好了,不愧是PYTHON。先放一个效果图

本身制作并不算难,很简单。你们可以先尝试制作,我先分析
要想制作自动摩尔斯电码,首先得要了解莫尔斯电码发报的规则


这是摩尔斯电码对照表
每一个字符都有一个与之对应的摩尔斯电码。在摩尔斯电码中,有三种状态,一种是点,一种是横,还有一种是停顿。一般点读作“滴”;横读作“答”。‘答’其实就是时间持续更长的‘滴’罢了。

从上面这段内容可以看出,**“答“的长度是随着”滴"的长度变化的,”答“的长度为3个”滴“的长度;而‘答’和‘滴’之间,也有一个‘滴’的长度的间隙;而字母和字母之间也有3个‘滴’的间隙,字词之间有5个‘滴’的长度的间隙。**如果还不是很清除的话,可以去百度

有了摩尔斯电码的基础之后,制作就清晰了,无非就是控制鼠标左键点击按钮的时间长短
我采用的是pynput这个库,可以通过pip install pynput来进行安装。这个库是用来控制鼠标点击和移动的
详细使用教程看这个链接:https://blog.csdn.net/weixin_34107955/article/details/93658661?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242

清楚了pynput和摩尔斯电码的使用之后,我们就可以开始制作了

制作流程:

  • 设置一个滴持续的时间 (base_speed)
  • 设置摩尔斯码对照的字典,我是这样设置的
    这里的1代表的是“滴”,这里的2代表的是“答”,建立对应关系。而如果碰到了空格,说明是字词与字词之间,应该单独提出来,单独处理
  • 读取想要发送的信息
  • 将鼠标移动到按钮所在的位置 mouse.position = (x, y),不清楚可以把鼠标放到按钮的位置,然后再通过mouse.position来读取位置,就知道了
  • 遍历想要发送的信息,读取每一个字符
  • 把拿到的每个字符放到字典里匹配,拿到对应的莫尔斯码
  • 再遍历拿到的莫尔斯码,判断是否不为F(如果是F说明是空格,需要单独处理
    • 如果不为F,则按下鼠标mouse.press(Button.left) ,再判断拿到的是1还是2。如果是1,那么就是‘滴’,持续一个 base_speed 的时间;如果是2,那么就是‘答’,持续三个 base_speed 的时间。最后松开鼠标mouse.release(Button.left)
    • 如果为F,那么就是空格,是词与词之间,空七个base_speed的时间(不知道为什么,本人设置五个base_speed的时间不行,不识别, 无奈设置成了7个)
  • 每得到一个莫尔斯码,最后就得要空一个base_speed的时间;每得到一个字母,就得空三个base_speed的时间,如果你还不知道为什么要这样做,就再去看看莫尔斯电码的规则

思路就是如此,大家可以先自己尝试着做一下我就先放出源码

from pynput.mouse import Button, Controller
import time
mouse = Controller()
words = {" ": "F", "A": "12", "B": "2111", "C": "2121", "D": "211", "E": "1", "F": "1121", "G": "221", "H": "1111", "I": "11", "J": "1222", "K": "212", "L": "1211", "M": "22", "N": "21", "O": "222", "P": "1221", "Q": "2212", "R": "121", "S": "111", "T": "2", "U": "112", "V": "1112", "W": "122", "X": "2112", "Y": "2122", "Z": "2211","1": "12222", "2": "11222", "3": "11122", "4": "11112", "5": "11111", "6": "21111", "7": "22111", "8": "22211", "9": "22221", "0": "22222", "?": "112211", ",": "221122", ".": "121212", "!": "2221", "'": "122221", "=": "21112", "/": "21121", ":": "222111", "-": "211112", '"': "121121", "@": "122121"}
base_speed = float(input("请输入一个滴的时间:"))
flag = False
click_point = (686, 817)
while True:obj = input("请输入想要发送的信息:").upper()mouse.position = click_pointfor i in obj:word_value = words[i]for j in word_value:if j != "F":flag = Falsemouse.press(Button.left)if j == "1":time.sleep(base_speed)if j == "2":time.sleep(base_speed * 3)mouse.release(Button.left)time.sleep(base_speed)else:time.sleep(base_speed * 7)flag = Trueif not flag:time.sleep(base_speed * 3)

其实这个程序还可以优化,更简洁一些,你们可以先想一下
我就先放优化之后的了

# -*- coding: GBK -*-from pynput.mouse import Button, Controller
import time
mouse = Controller()
words = {" ": "F", "A": "12", "B": "2111", "C": "2121", "D": "211", "E": "1", "F": "1121", "G": "221", "H": "1111", "I": "11", "J": "1222", "K": "212", "L": "1211", "M": "22", "N": "21", "O": "222", "P": "1221", "Q": "2212", "R": "121", "S": "111", "T": "2", "U": "112", "V": "1112", "W": "122", "X": "2112", "Y": "2122", "Z": "2211","1": "12222", "2": "11222", "3": "11122", "4": "11112", "5": "11111", "6": "21111", "7": "22111", "8": "22211", "9": "22221", "0": "22222", "?": "112211", ",": "221122", ".": "121212", "!": "2221", "'": "122221", "=": "21112", "/": "21121", ":": "222111", "-": "211112", '"': "121121", "@": "122121"}
base_speed = float(input("请输入一个滴的时间:"))
click_point = (686, 817)
while True:obj = input("请输入想要发送的信息:").upper()mouse.position = click_pointfor i in obj:word_value = words[i]for j in word_value:if j != "F":mouse.press(Button.left)if j == "1":time.sleep(base_speed)if j == "2":time.sleep(base_speed * 3)mouse.release(Button.left)time.sleep(base_speed)else:time.sleep(base_speed * 4)time.sleep(base_speed * 3)

这样是不是优化了很多了呢?每个人写的程序都会不一样,相信你会写出比我的更好的程序来的(本人渣渣)

如果有不解的地方,可以在评论区留言,我看到了会回复的

哦对了,这个程序要想让它顺利运行,是得在
这个页面下才能运行的,那个click_point按照自己的情况来定,总之就是
这个[key]的位置

教你制作一个自动发摩斯电码的PYTHON小程序相关推荐

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

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

  2. 想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本

    前言 嗨喽!大家好,这里是魔王!! 大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会. 话剧.音乐剧.体育赛事等领域. 但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票 ...

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

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

  4. PWA入门:手把手教你制作一个PWA应用

    摘要: PWA图文教程 原文:PWA入门:手把手教你制作一个PWA应用 作者:MudOnTire Fundebug经授权转载,版权归原作者所有. 简介 Web前端的同学是否想过学习app开发,以弥补自 ...

  5. 手把手教你制作一个简单的聊天机器人(图灵api)

    前言:在无聊的时候打打游戏.听听歌还不如来找个人来陪你聊天,今天来教大家制作一个聊天机器人,这样就不会无聊了,在线聊天机器人地址借愁哥哥机器人(可能有点丑,大家将就一下 (

  6. 手把手教你制作一个带特效的全景图片

    一个好的产品才会令人印象深刻,全景图也是这样.这篇文章教你制作一个带特效的全景图片,让你的全景图片"靓"起来. 第一步.准备一张2:1的全景图片.如果不知道全景图是怎么制作的话,可 ...

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

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

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

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

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

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

  10. python制作一个教学网站_小白如何入门Python? 制作一个网站为例

    首先最重要的问题是为什么要学习python?这个问题这个将指导你如何学习Python和学习的方式. 以你最终想制作一个网站为例.从一个通用的学习资源列表开始不仅会消磨你的激情,而且你获得的知识很难应用 ...

最新文章

  1. AVFoundation学习Demo--拍摄视频
  2. 购买绝版书的好地方——淘宝
  3. 除非Microsoft FTP 服务(FTPSVC)正在运行,否则无法启动FTP站点。服务目前已停止...
  4. [Sdoi2010]古代猪文
  5. As Simple as One and Two(思维)
  6. activemq网络桥接_ActiveMQ –经纪人网络解释–第4部分
  7. opendir、readdir和closedir函数
  8. js 把对象按照属性名的字母顺序进行排列
  9. 请实现一个函数,用来判断一棵二叉树是不是对称的。
  10. python传递参数 调用c++ 传递vector_python调用c++传递数组的实例
  11. HoloLens1开发(二):结合Vuforia开发
  12. t-sql的执行顺序
  13. 盘点12个Python数据可视化库,通吃任何领域
  14. 深入理解Yii2.0 (3)行为(Behavior)
  15. 记录并分析一些软件,以便以后换电脑重新安装(不定时更新)
  16. 微信小程序上拉触底事件
  17. 一个网工的十年奋斗史 - 工作篇
  18. Python(七)之OS模块
  19. java全能速查宝典_Java全能速查宝典_IT教程网
  20. 阿里云Codeup云效使用flow+k8s部署go语言项目

热门文章

  1. 离散数学-欧拉图和哈密顿图
  2. C10K问题及解决方案
  3. MyEclipse里自制JSP模板
  4. python代码设置环境变量
  5. Qunee for HTML5图形组件
  6. linux离线安装pg数据库
  7. QQ音乐MV/腾讯视频下载教程
  8. 【学习总结匈牙利算法到KM算法】
  9. Arduino IDE 烧录 ESP8266教程
  10. 2013 VS 2018:五年前和今天的十大数字货币大比拼