摩斯密碼

      在〈摩斯密碼〉中尚無留言

基礎拉丁字母

字元 代碼 字元 代碼 字元 代碼 字元 代碼 字元 代碼 字元 代碼 字元 代碼
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 ----- -

標點符號

字元 代碼 字元 代碼 字元 代碼 字元 代碼 字元 代碼 字元 代碼
. ·-·-·- : ---··· , --··-- ; -·-·-· ? ··--·· = -···-
·----· / -··-· ! -·-·-- -····- _ ··--·- ·-··-·
( -·--· ) -·--·- $ ···-··- & ·-··· @ ·--·-· + ·-·-·

代碼如下

codelm={}
codelm['A']='01'
codelm['B']='1000'
codelm['C']='1010'
codelm['D']='100'
codelm['E']='0'
codelm['F']='0010'
codelm['G']='110'
codelm['H']='0000'
codelm['I']='00'
codelm['J']='0111'
codelm['K']='101'
codelm['L']='0100'
codelm['M']='11'
codelm['N']='10'
codelm['O']='111'
codelm['P']='0110'
codelm['Q']='1101'
codelm['R']='010'
codelm['S']='000'
codelm['T']='1'
codelm['U']='001'
codelm['V']='0001'
codelm['W']='011'
codelm['X']='1001'
codelm['Y']='1011'
codelm['Z']='1100'
codelm['0']='11111'
codelm['1']='01111'
codelm['2']='00111'
codelm['3']='00011'
codelm['4']='00001'
codelm['5']='00000'
codelm['6']='10000'
codelm['7']='11000'
codelm['8']='11100'
codelm['9']='11110'
codelm[',']='110011'
codelm[';']='101010'
codelm['?']='001100'
codelm['=']='10001'
codelm["'"]='011110'
codelm['/']='10010'
codelm['!']='101011'
codelm['-']='100001'
codelm['_']='001101'
codelm['"']='010010'
codelm['(']='10110'
codelm[')']='101101'
codelm['$']='0001001'
codelm['&']='01000'
codelm['@']='011010'
codelm['+']='01010'

codeml={}
codeml['01']='A'
codeml['1000']='B'
codeml['1010']='C'
codeml['100']='D'
codeml['0']='E'
codeml['0010']='F'
codeml['110']='G'
codeml['0000']='H'
codeml['00']='I'
codeml['0111']='J'
codeml['101']='K'
codeml['0100']='L'
codeml['11']='M'
codeml['10']='N'
codeml['111']='O'
codeml['0110']='P'
codeml['1101']='Q'
codeml['010']='R'
codeml['000']='S'
codeml['1']='T'
codeml['001']='U'
codeml['0001']='V'
codeml['011']='W'
codeml['1001']='X'
codeml['1011']='Y'
codeml['1100']='Z'
codeml['11111']='0'
codeml['01111']='1'
codeml['00111']='2'
codeml['00011']='3'
codeml['00001']='4'
codeml['00000']='5'
codeml['10000']='6'
codeml['11000']='7'
codeml['11100']='8'
codeml['11110']='9'
codeml['010101']='.'
codeml['111000']=':'
codeml['110011']=','
codeml['101010']=';'
codeml['001100']='?'
codeml['10001']='='
codeml['011110']="'"
codeml['10010']='/'
codeml['101011']='!'
codeml['100001']='-'
codeml['001101']='_'
codeml['010010']='"'
codeml['10110']='('
codeml['101101']=')'
codeml['0001001']='$'
codeml['01000']='&'
codeml['011010']='@'
codeml['01010']='+'

def l2m(str):
    mos=''
    for l in str.upper():
        if l==' ':mos+='    '
        else:
            if l in codelm:
                mos=mos+codelm[l]+'   '
    return mos[:-3].replace('1','-').replace('0','.')
def m2l(mos):
    str=''
    mos=mos.replace('.','0').replace('-','1')
    for word in mos.split('       '):
        for l in word.split('   '):
            if l in codeml:
                str+=codeml[l]
        str+=' '
    return str

str=input("請輸入要傳送的句子 : ")
mos=l2m(str)
print(mos)
str=m2l(mos)
print(str)

結果

請輸入要傳送的句子 : Hello, I am Thomas
.... . .-.. .-.. --- --..-- .. .- -- - .... --- -- .- ...
HELLO, I AM THOMAS

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *