Python 算法训练之摩斯电码

摩斯电码

摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。它发明于1837年,发明者有争议,是美国人塞缪尔·莫尔斯或者艾尔菲德·维尔。 摩尔斯电码是一种早期的数字化通信形式,但是它不同于现代只使用零和一两种状态的二进制代码,它的代码包括五种: 点、划、点和划之间的停顿、每个字符间短的停顿(在点和划之间)、每个词之间中等的停顿以及句子之间长的停顿。

码表

基本码表

英语字母MC英语字母MC数字MC
A. _N_ .1. _ _ _ _
B_ . . .O_ _ _2. . _ _ _
C_ . _ .P. _ _ .3. . . _ _
D_ . .Q_ _ . _4. . . . _
E.R. _ .5. . . . .
F. . _ .S. . .6_ . . . .
G_ _ .T_7_ _ . . .
H. . . .U. . _8_ _ _ . .
I. .V. . . _9_ _ _ _ .
J. _ _ _W. _ _0_ _ _ _ _
K_ . _X_ . . _
L. _ . .Y_ . _ _
M_ _Z_ _ . .

增加码表

标点符号MC数字MC简码
句号. _ . _ . _1. _
逗号_ _ . . _ _2. . _
重点号或除号_ _ _ . . .3. . . _
问号. . _ _ . .4. . . . _
省略号. _ _ _ _ .5. . . . .
连接号或减号_ . . . . _6_ . . . .
左括号_ . _ _ .7_ . . .
右括号_ . _ _ . _8_ . .
斜线或除号_ . . _ .9_ .
双线或等于号_ . . . _0_
正号或加号. _ . _ .
双引号. _ . . _ .
乘号_ . . _

知识拓展

1、SOS是怎么来的?

OS并不是任何求救英文的缩写,而是因为在摩尔斯电码中,S为. . .,O为_ _ _,所以SOS对于发报方是最容易发出的信号,对于接收方是最容易识别的信号,因此国际无线电报公约组织于1908年正式将它确定为国际通用海难求救信号。

2、摩斯电码有歧义吗?

如果不做处理当然会有。例如,M是_ _,E是.,而G是_ _ .,如果直接进行读取,就有ME和G两种解释。因此,表达ME时,需要加入字母间短间隔,发为_ _ / ./代表时间上停顿一下。标准的间隔时间为:点,1t;划,3t;点划间,1t;字符间,3t;字间,7t。当然,新手可以直接间隔更长,体现出分隔的感觉,无非就是发报时间更长一点。

3、如何记忆?

摩斯电码树记忆

img

摩斯电码笔画记忆

img

morse_dict = [
  ".-", "-...", "-.-.", "-..", ".", "..-.", 
  "--.", "....", "..", ".---", "-.-", ".-..",
  "--", "-.", "---", ".--.", "--.-",
  ".-.", "...", "-", "..-", "...-",
  ".--", "-..-", "-.--", "--..",
  ".----", "..---", "...--", "....-", ".....",
  "-....", "--...","---..", "----.", "-----"
]
ch_str = 'abcdefghijklmnopqrstuvwxyz1234567890'

def morse_code(sentence):
    morse = []
    words = sentence.split()
    for i in words:
        m = ''
        for j in i:
            a = ch_str.index(j)
            m += morse_dict[a] + "  "
        morse.append(m)
    return len(morse), morse

while True:
    s = input("请输入需要编码的内容:")
    if s == "q":
        print("退出程序")
        break
    else:
        m = morse_code(s)
        print(f"{s}的摩斯电码是{m}")


版权声明:本文为george__lau原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。