最近想記憶摩爾斯密碼來裝裝逼,作爲檢查,寫個小程序較爲方便。
查表後,設置了編碼及解碼字典。格式爲字母間間隔爲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)