摩爾斯編碼與解碼

最近想記憶摩爾斯密碼來裝裝逼,作爲檢查,寫個小程序較爲方便。

查表後,設置了編碼及解碼字典。格式爲字母間間隔爲1個空格,單詞的間隔爲2個空格,這樣不僅瀏覽起來方便,編碼解碼也方便。

# import re
# 摩爾斯電碼對應符號
# 編碼
chars={'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:'----.','?':'..--..','/':'-..-.','()':'-.--.-','-':'-....-','.':'.-.-.-',',':'..-..',
'!':'..--.',':':'---...',';':'-.-.-','+':'.-.-.','=':'-...-'}
# 解碼
reversed_chars={'.-': '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,
 '..--..': '?', '-..-.': '/', '-.--.-': '()', '-....-': '-', '.-.-.-': '.','..-..':',','..--.':'!',
 '---...':':','-.-.-':';','.-.-.':'+','-...-':'='}
def encode(string):
	old_str=string.split()
	result=''
	for ss in old_str:
		for i in ss:
			if i.isdigit():
				result+=chars[int(i)]
			elif i.isalpha() and chars[i.upper()]:
				result+=chars[i.upper()]
			elif i in chars:
				result+=chars[i]
			else:
				result+=i
			result+=' '
		# 單詞間多加一個空格
		result+=' '
	return result.rstrip()

def decode(string):
	old_str=string.split(' ')
	result=''
	for i in old_str:
		if i:
			if i in reversed_chars:
				result+=str(reversed_chars[i])
			else:
				result+=i
		# 因爲單詞間的空格設置爲了2個,所以此時爲空表示存在空格
		else:
			result+=' '
	# 返回小寫格式
	# return result.lower().capitalize()
	return result.lower()
# 測試
s=encode('7 people had fucked you when i went out to buy a cigarette! bitch!!!')
print(s)
ss=decode(s)
print(ss)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章