牛逼了!用Python实现摩尔斯电码翻译器,网友:“怎么敲我爱你?”

莫尔斯电码是一种将文本信息作为一系列开,关的音调,灯光或咔嗒声进行传输的方法,熟练的听众或观察者无需特殊设备即可直接理解。它以电报的发明者塞缪尔·FB·莫尔斯(Samuel FB Morse)的名字命名。

算法

该算法非常简单。英文中的每个字符都由一系列的“点”和“破折号”代替,有时只是单数的“点”或“破折号”,反之亦然。

加密

  1. 在加密的情况下,我们一次从一个单词中提取每个字符(如果不是空格),并将其与存储在我们选择的任何数据结构中的相应摩尔斯电码进行匹配(如果您使用python进行编码,则字典可以证明是在这种情况下非常有用)
  2. 将莫尔斯电码存储在一个变量中,该变量将包含我们的编码字符串,然后在该字符串中添加一个空格,其中将包含结果。
  3. 使用摩尔斯电码进行编码时,我们需要在每个字符之间添加1个空格,并在每个单词之间添加2个连续的空格。
  4. 如果字符是空格,则将另一个空格添加到包含结果的变量中。我们重复此过程,直到遍历整个字符串

解密方式

  1. 在解密的情况下,我们首先在要解码的字符串的末尾添加一个空格(稍后将对此进行解释)。
  2. 现在,我们继续从字符串中提取字符,直到没有任何空格为止。
  3. 一旦获得空格,我们就会在提取的字符序列(或莫尔斯电码)中查找相应的英语字符,并将其添加到将存储结果的变量中。
  4. 请记住,跟踪空间是此解密过程中最重要的部分。一旦获得2个连续的空格,我们将在包含解码字符串的变量中添加另一个空格。
  5. 字符串末尾的最后一个空格将帮助我们识别莫尔斯电码字符的最后一个序列(因为空格可作为提取字符并开始对其进行解码的检查)。

执行

Python提供了一种称为字典的数据结构,该结构以键值对的形式存储信息,这对于实现密码(例如莫尔斯电码)非常方便。我们可以将莫尔斯电码表保存在字典中,其中(键值对)=>(英文字符-摩尔斯电码)。明文(英文字符)代替密钥,密文(摩尔斯码)形成相应密钥的值。可以从字典中访问键的值,就像我们通过它们的索引访问数组的值一样,反之亦然。


''' 
VARIABLE KEY 
'cipher' -> 'stores the morse translated form of the english string' 
'decipher' -> 'stores the english translated form of the morse string' 
'citext' -> 'stores morse code of a single character' 
'i' -> 'keeps count of the spaces between morse characters' 
'message' -> 'stores the string to be encoded or decoded' 
'''

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':'-----', ', ':'--..--', '.':'.-.-.-', 
					'?':'..--..', '/':'-..-.', '-':'-....-', 
					'(':'-.--.', ')':'-.--.-'} 

def encrypt(message): 
	cipher = '' 
	for letter in message: 
		if letter != ' ': 

			cipher += MORSE_CODE_DICT[letter] + ' '
		else: 
			cipher += ' '

	return cipher 

def decrypt(message): 

	message += ' '

	decipher = '' 
	citext = '' 
	for letter in message: 

		if (letter != ' '): 

			i = 0

			citext += letter 

		else: 
			i += 1

			if i == 2 : 

				decipher += ' '
			else: 

				decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT 
				.values()).index(citext)] 
				citext = '' 

	return decipher 

def main(): 
	message = "GEEKS-FOR-GEEKS"
	result = encrypt(message.upper()) 
	print (result) 

	message = "--. . . -.- ... -....- ..-. --- .-. -....- --. . . -.- ... "
	result = decrypt(message) 
	print (result) 

if __name__ == '__main__': 
	main() 

输出:

-。。。-.- ... -....- ..- -.. -....--。。。-.- ...
GEEKS-FOR-GEEKS

在这里还是要推荐下我自己建的Python学习群:705933274,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2021最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!

猜你喜欢

转载自blog.csdn.net/pyjishu/article/details/114746372