Python制作摩斯密碼翻譯器
分析
摩斯密碼是一種將文本信息作為一系列通斷的音調(diào)、燈光或咔嗒聲傳輸?shù)姆椒?,無需特殊設(shè)備,熟記的小伙伴即可直接翻譯。它以電報(bào)發(fā)明者Samuel F. B. Morse的名字命名。
算法
算法非常簡單。英語中的每個字符都被一系列“點(diǎn)”和“破折號”代替,或者有時只是單數(shù)的“點(diǎn)”或“破折號”,反之亦然。
加密
- 在加密的情況下,我們一次一個地從單詞中提取每個字符(如果不是空格),并將其與存儲在我們選擇的任何數(shù)據(jù)結(jié)構(gòu)中的相應(yīng)摩斯密碼匹配(如果您使用 python 編碼,字典可以變成在這種情況下非常有用)
- 將摩斯密碼存儲在一個變量中,該變量將包含我們編碼的字符串,然后我們在包含結(jié)果的字符串中添加一個空格。
- 在用摩斯密碼編碼時,我們需要在每個字符之間添加 1 個空格,在每個單詞之間添加 2 個連續(xù)空格。
- 如果字符是空格,則向包含結(jié)果的變量添加另一個空格。我們重復(fù)這個過程,直到我們遍歷整個字符串
解密
- 在解密的情況下,我們首先在要解碼的字符串末尾添加一個空格(這將在后面解釋)。
- 現(xiàn)在我們繼續(xù)從字符串中提取字符,直到我們沒有任何空間。
- 一旦我們得到一個空格,我們就會在提取的字符序列(或我們的莫爾斯電碼)中查找相應(yīng)的英語字符,并將其添加到將存儲結(jié)果的變量中。
- 請記住,跟蹤空間是此解密過程中最重要的部分。一旦我們得到 2 個連續(xù)的空格,我們就會向包含解碼字符串的變量添加另一個空格。
- 字符串末尾的最后一個空格將幫助我們識別莫爾斯電碼字符的最后一個序列(因?yàn)榭崭癯洚?dāng)提取字符并開始解碼它們的檢查)。
執(zhí)行
Python 提供了一種稱為字典的數(shù)據(jù)結(jié)構(gòu),它以鍵值對的形式存儲信息,這對于實(shí)現(xiàn)諸如摩爾斯電碼之類的密碼非常方便。我們可以將摩斯密碼表保存在字典中,其中 (鍵值對)=>(英文字符-莫爾斯電碼) 。明文(英文字符)代替密鑰,密文(摩斯密碼)形成相應(yīng)密鑰的值。鍵的值可以從字典中訪問,就像我們通過索引訪問數(shù)組的值一樣,反之亦然。
摩斯密碼對照表
實(shí)現(xiàn)代碼
# 實(shí)現(xiàn)摩斯密碼翻譯器的 Python 程序 ''' VARIABLE KEY 'cipher' -> '存儲英文字符串的摩斯翻譯形式' 'decipher' -> '存儲摩斯字符串的英文翻譯形式' 'citext' -> '存儲單個字符的摩斯密碼' 'i' -> '計(jì)算摩斯字符之間的空格' 'message' -> '存儲要編碼或解碼的字符串 ''' # 表示摩斯密碼圖的字典 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':'-----', ', ':'--..--', '.':'.-.-.-', '?':'..--..', '/':'-..-.', '-':'-....-', '(':'-.--.', ')':'-.--.-'} # 根據(jù)摩斯密碼圖對字符串進(jìn)行加密的函數(shù) def encrypt(message): cipher = '' for letter in message: if letter != ' ': # 查字典并添加對應(yīng)的摩斯密碼 # 用空格分隔不同字符的摩斯密碼 cipher += MORSE_CODE_DICT[letter] + ' ' else: # 1個空格表示不同的字符 # 2表示不同的詞 cipher += ' ' return cipher # 將字符串從摩斯解密為英文的函數(shù) def decrypt(message): # 在末尾添加額外空間以訪問最后一個摩斯密碼 message += ' ' decipher = '' citext = '' for letter in message: # 檢查空間 if (letter != ' '): # 計(jì)數(shù)器來跟蹤空間 i = 0 # 在空格的情況下 citext += letter # 在空間的情況下 else: # 如果 i = 1 表示一個新字符 i += 1 # 如果 i = 2 表示一個新詞 if i == 2 : # 添加空格來分隔單詞 decipher += ' ' else: # 使用它們的值訪問密鑰(加密的反向) decipher += list(MORSE_CODE_DICT.keys())[list(MORSE_CODE_DICT .values()).index(citext)] citext = '' return decipher # 硬編碼驅(qū)動函數(shù)來運(yùn)行程序 def main(): message = "JUEJIN-HAIYONG" result = encrypt(message.upper()) print (result) message = ".--- ..- . .--- .. -. -....- .... .- .. -.-- --- -. --." result = decrypt(message) print (result) message = "I LOVE YOU" result = encrypt(message.upper()) print (result) message = ".. .-.. --- ...- . -.-- --- ..-" result = decrypt(message) print (result) # 執(zhí)行主函數(shù) if __name__ == '__main__': main()
結(jié)果?
.--- ..- . .--- .. -. -....- .... .- .. -.-- --- -. --.
JUEJIN-HAIYONG
..? .-.. --- ...- .? -.-- --- ..-
I LOVE YOU
以上就是Python制作摩斯密碼翻譯器的詳細(xì)內(nèi)容,更多關(guān)于Python 摩斯密碼翻譯的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
最新解決沒有NVSMI文件夾以及nvidia-smi‘?不是內(nèi)部或外部命令也不是可運(yùn)行的程序或批處理文件
這篇文章主要介紹了解決沒有NVSMI文件夾以及nvidia-smi‘?不是內(nèi)部或外部命令也不是可運(yùn)行的程序或批處理文件,本文通過兩種問題分析給大家分享解決方法,需要的朋友可以參考下2023-01-01tensor.squeeze函數(shù)和tensor.unsqueeze函數(shù)的使用詳解
本文主要介紹了tensor.squeeze函數(shù)和tensor.unsqueeze函數(shù)的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03Python使用Selenium實(shí)現(xiàn)淘寶搶單的流程分析
這篇文章主要介紹了Python使用Selenium實(shí)現(xiàn)淘寶搶單的流程分析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06python中的位置參數(shù)和關(guān)鍵字參數(shù)詳解
位置參數(shù)和關(guān)鍵字參數(shù)是 Python 中的兩種不同類型的函數(shù)參數(shù)傳遞方式,位置參數(shù)依賴于參數(shù)的位置順序,而關(guān)鍵字參數(shù)通過參數(shù)名傳遞,不受位置影響,本文通過代碼示例給大家詳細(xì)介紹了python中的位置參數(shù)和關(guān)鍵字參數(shù),需要的朋友可以參考下2023-12-12PyQt5中QSpinBox計(jì)數(shù)器的實(shí)現(xiàn)
這篇文章主要介紹了PyQt5中QSpinBox計(jì)數(shù)器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python3 下載網(wǎng)絡(luò)圖片代碼實(shí)例
這篇文章主要介紹了python3 下載網(wǎng)絡(luò)圖片代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08JetBrains PyCharm(Community版本)的下載、安裝和初步使用圖文教程詳解
這篇文章主要介紹了JetBrains PyCharm(Community版本)的下載、安裝和初步使用教程,本文圖文并茂給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)和工作具有一定的參考借鑒價值 ,需要的朋友可以參考下2020-03-03python實(shí)現(xiàn)自動生成C++代碼的代碼生成器
這篇文章介紹了python實(shí)現(xiàn)C++代碼生成器的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07