morse_code_implementation 摩斯电码实现
摩尔斯电码
摩尔斯电码也被称作摩斯密码,是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,是一种早期的数字化通信形式。不同于现代化的数字通讯,摩尔斯电码只使用零和一两种状态的二进制代码,它的代码包括五种:
短促的点信号“?”,读“滴”(Di)
保持一定时间的长信号“—”,读“嗒”(Da)
表示点和划之间的停顿、
每个词之间中等的停顿,
以及句子之间长的停顿。
产生历史
摩斯电码是一种神奇的密码,它是一种信号的代码而且它时通时断,这样的信号代码经过不同的排列顺序从而表现出不同的英文字母、数字以及标点符号等。它的发明者是美国人艾尔菲德·维尔,那个时候他正在协助 SamuelMorse进行摩尔斯电报机的发明(1835年)。
然而摩尔斯电码是由美国人摩尔斯在1837年被发明的,它的组成是由点dot(.)划dash(-)这两种符号所组成的。在这当中,一点作为一个基本的信号单位,一划的长度就相当于是3点的时间长度;在一个字母或是数字之内,每个点、划之间的间隔就应该是两点的时间长度;字母(数字)与字母(数字)之间的间隔就是7点的时间长度。摩尔斯码在早期的无线电上作用是非常大的,它是每个无线电通讯者所须必知的。因为通讯技术的不断进步,随后各国就在1999年停止了对摩尔斯码的使用,可是由于它所占的频宽最少,同时又具有一种技术及艺术的特性,所以在实际的生活当中就有着广泛的应用。
摩斯电码最早就是用一些表示数字的点和划来进行表示的。其中的数字对应单词,也就是需要查找一本代码表才可以得知每个词所对应的数字。用一个电键就能够敲击出点、划以及中间的停顿。然而电报是由摩斯所发明的,可是他并没有相关的专业技术。所以之后他就与艾尔菲德·维尔签订了一个协议,让他帮助自己制作摩斯电码然后制造出更加实用的设备。于是,艾尔菲德?维尔构思了一个方案,就是通过点、划和中间的停顿,把各个字元以及标点符号彼此独立地发送出去。之后他们就达成了一致,随后这种标识不同符号的方案就被放到摩斯的专利中去。然而这就是现在我们所熟知的美式摩尔斯电码,世界上第一条电报就是通过它来传送的。
用一种音调平稳而又时断时续的无线电信号能够传送这样的代码,一般会被称作是连续波,缩写就是CW。然而它可以是电报电线中的电子脉冲,同时也可以是一种机械的或是视觉的信号(如闪光)。在一般的情况下,随意的任何一种能把书面字元用可变长度的信号表示的编码方式,都是能够称之为摩尔斯电码。可是如今这一术语只是用来特指两种表示英语字母以及符号的摩尔斯电码:这种美式摩斯电码就在线电报通信系统中使用;今天还在使用的国际摩尔斯电码则仅仅是在使用点和划(去掉了停顿)。然而电报公司就会根据要发的信的长度收费。商业代码精心的设计出了五个字元组成一组的代码,把它作为一个单词发送。就比如,BYOXO; LIOUY;AYYU。摩斯电码能够单独发送这些五个字元的简语。人们在网络用语中一般也会说一些常用的摩斯商用代码。现今仍然在业余无线电中使用的就有Q简语以及Z简语:然而他们最初是为报务员之间交流电报编号、通信质量、频率变更等信息服务的。
在1838年1月8日,艾菲尔德·维尔曾经展示了一种使用点和划的电报码,其实这就是摩尔斯电码的前身。然而作为一种信息编码标准的摩斯电码,它拥有非常长的生命力,就这一点来说,就是其他编码所无法超越的。
摩尔斯电码在海事通讯中被作为国际标准一直使用到1999年。1997年当法国海军停止使用摩尔斯电码时,其发送的最后条消息就是:“所有人注意,这是我们在永远沉寂之前最后的一声呐喊!”
表示方法
其实有两种“符号”是用来表示字元的:那就是划和点,或分别叫嗒(Dah)和滴(Dit)或是长和短。而发报的速度是由点的长度来决定的,而且被当作是发报的时间参考。下面就是时间控制的图示:
Morsecode:-- --- ·-· ··· · / -·-· --- -·· ·
这里,“-”表示划,“.”表示点。这是上面消息的准确发报时间(“="表示信号有,”.“ 代表信号无,每个为一个点的长度):
=.=...=.=.=...=.=.=...=.=.=...=.......=.=.=.=...=.=.===
划一般是三个点的长度;点划之间的间隔是一个点的长度;字元之间的间隔就是三个点的长度;而单词之间的间隔是七个点的长度。在刚开始的时候,初学者一般都会被教导发送点划间隔短小、短而快的字元,符号以及单词之间也被夸大了间隔的时间。相比较来说,这种方式是更加容易被学会的
代码
[morse_code_implementation.py]{..\src\ciphers\morse_code_implementation.py}
"""
Prepare
1. sys.path 中增加 TheAlgorithms\src 子模块
"""
import sys
sys.path.append(‘E:\dev\AI\TheAlgorithms\src‘)
案例一:使用摩斯电码 加密、解密码
初始条件,定义 morse code 字典
Dictionary representing the morse code chart
MORSE_CODE_DICT = {
"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": "--..",
"1": ".----",
"2": "..---",
"3": "...--",
"4": "....-",
"5": ".....",
"6": "-....",
"7": "--...",
"8": "---..",
"9": "----.",
"0": "-----",
"&": ".-...",
"@": ".--.-.",
":": "---...",
",": "--..--",
".": ".-.-.-",
"‘": ".----.",
‘"‘: ".-..-.",
"?": "..--..",
"/": "-..-.",
"=": "-...-",
"+": ".-.-.",
"-": "-....-",
"(": "-.--.",
")": "-.--.-",
# Exclamation mark is not in ITU-R recommendation
"!": "-.-.--",
}
from ciphers.morse_code_implementation import encrypt,decrypt
"""
"""
message = "Morse code here"
result = encrypt(message.upper())
print(result)
message = result
result = decrypt(message)
print(result)
-- --- .-. ... . / -.-. --- -.. . / .... . .-. .
MORSE CODE HERE