如何使用 Python 創建一個摩爾斯電碼轉換器
已發表: 2022-10-19摩爾斯電碼是一種使用點、破折號和空格對消息進行編碼的方法。 它被廣泛用於秘密交流消息。
您可能已經在許多電影的海軍場景中看到使用摩爾斯電碼來傳達信息。 我們在這裡討論的是相同的莫爾斯電碼,但唯一的區別是我們將編寫一個 Python 程序來將英語翻譯成莫爾斯電碼,反之亦然。
摩爾斯電碼
摩爾斯電碼對每個英文字母、數字、標點符號和非拉丁字符都有不同的模式。 一旦你知道了不同字符的莫爾斯電碼模式,就很容易對它們進行編碼和解碼。 您可以參考 Wikipedia page of morse code 了解更多細節和模式。

在本教程中,我們將學習如何將純英文文本編碼為摩爾斯電碼,反之亦然。 我們將在編碼解碼時使用英文字母、數字和標點符號。 如果你想添加更多類型的字符,只要你了解了編碼和解碼的基礎,你就可以輕鬆做到。
要記住的一件事是,大寫和小寫字母都具有相同的莫爾斯電碼模式。 這是因為莫爾斯電碼主要用於不關心字母大小寫的交流,如日常對話。
讓我們進入編碼和解碼的編碼部分。
英語到摩爾斯電碼
將純英文文本轉換為摩爾斯電碼的算法很簡單。 讓我們檢查一下算法。
- 使用帶有英語字母、數字和標點符號的莫爾斯電碼模式映射創建字典。
- 遍歷文本並將每個文本字符的莫爾斯電碼模式添加到結果中。
- 摩爾斯電碼在每個字符後包含一個空格,在每個單詞後包含一個雙空格。
- 因此,當我們在文本中遇到空格,即單詞的分隔符時,我們需要在結果中添加雙倍空格。
- 結果字符串將是我們需要的莫爾斯電碼。
- 最後,返回結果。
嘗試用 Python 編寫代碼。 不用擔心,即使您無法完整地編寫它。
讓我們檢查一下將純英文文本編碼為莫爾斯電碼的代碼。
# dictionary for mapping characters to morse code CHARS_TO_MORSE_CODE_MAPPING = { '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': '-----', '.': '.-.-.-', ',': '--..--', '?': '..--..', '\'': '· − − − − ·', '!': '− · − · − −', '/': '− · · − ·', '(': '− · − − ·', ')': '− · − − · −', '&': '· − · · ·', ':': '− − − · · ·', ';': '− · − · − ·', '=': '− · · · −', '+': '· − · − ·', '-': '− · · · · −', '_': '· · − − · −', '"': '· − · · − ·', '$': '· · · − · · −', '@': '· − − · − ·', } # function to encode plain English text to morse code def to_morse_code(english_plain_text): morse_code = '' for char in english_plain_text: # checking for space # to add single space after every character and double space after every word if char == ' ': morse_code += ' ' else: # adding encoded morse code to the result morse_code += CHARS_TO_MORSE_CODE_MAPPING[char.upper()] + ' ' return morse_code morse_code = to_morse_code( 'Geekflare produces high-quality technology & finance articles, makes tools, and APIs to help businesses and people grow.' ) print(morse_code)
您可以在下面看到莫爾斯電碼輸出。 如果您沒有更改消息,您還應該在終端中看到類似的莫爾斯電碼。

--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.-
歡呼! 我們得到了莫爾斯電碼。 你知道接下來會發生什麼。
在進入解碼程序之前,讓我們停下來思考一下如何編寫代碼來解碼它。
…
您應該考慮將CHARS_TO_MORSE_CODE_MAPPING
字典作為步驟之一。 手動操作很忙,並且需要在原始映射更改時進行更新。 讓我們編寫代碼來反轉字典。
def reverse_mapping(mapping): reversed = {} for key, value in mapping.items(): reversed[value] = key return reversed
我們只是用上面的代碼反轉給定字典的鍵值對。 結果字典將包含值是新鍵和鍵作為新值。
我們擁有將莫爾斯電碼解碼為純英文文本的所有部件。 事不宜遲,讓我們解碼莫爾斯電碼。
莫爾斯電碼到英語
我們可以將摩爾斯電碼編碼的過程逆向得到解碼算法。 讓我們看看將莫爾斯電碼解碼為純英文文本的算法。
- 使用我們編寫的 util 函數反轉
CHARS_TO_MORSE_CODE_MAPPING
字典。 - 遍歷莫爾斯電碼並跟踪當前的莫爾斯電碼字符。
- 如果我們遇到一個空格,這意味著我們有一個完整的莫爾斯電碼字符要解碼。
- 如果當前的莫爾斯電碼字符為空並且我們有兩個連續的空格,則添加一個單詞分隔符,它是純英文文本中的一個空格。
- 如果上述條件為假,則從字典中獲取解碼後的字符並將其添加到結果中。 重置當前的莫爾斯電碼字符。
- 如果我們沒有遇到空格,請將其添加到當前的莫爾斯字符。
- 如果我們遇到一個空格,這意味著我們有一個完整的莫爾斯電碼字符要解碼。
- 如果有最後一個字符,則使用字典解碼後將其添加到結果中。
- 最後返回結果。
讓我們檢查一下上述算法的代碼。
def reverse_mapping(mapping): # add function code from the previous snippet... CHARS_TO_MORSE_CODE_MAPPING = {} # add dictionary values MORSE_CODE_TO_CHARS_MAPPING = reverse_mapping(CHARS_TO_MORSE_CODE_MAPPING) def to_english_plain_text(morse_code): english_plain_text = '' current_char_morse_code = '' i = 0 while i < len(morse_code) - 1: # checking for each character if morse_code[i] == ' ': # checking for word if len(current_char_morse_code) == 0 and morse_code[i + 1] == ' ': english_plain_text += ' ' i += 1 else: # adding decoded character to the result english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[ current_char_morse_code] current_char_morse_code = '' else: # adding morse code char to the current character current_char_morse_code += morse_code[i] i += 1 # adding last character to the result if len(current_char_morse_code) > 0: english_plain_text += MORSE_CODE_TO_CHARS_MAPPING[ current_char_morse_code] return english_plain_text english_plain_text = to_english_plain_text( '--. . . -.- ..-. .-.. .- .-. . .--. .-. --- -.. ..- -.-. . ... .... .. --. .... − · · · · − --.- ..- .- .-.. .. - -.-- - . -.-. .... -. --- .-.. --- --. -.-- · − · · · ..-. .. -. .- -. -.-. . .- .-. - .. -.-. .-.. . ... --..-- -- .- -.- . ... - --- --- .-.. ... --..-- .- -. -.. .- .--. .. ... - --- .... . .-.. .--. -... ..- ... .. -. . ... ... . ... .- -. -.. .--. . --- .--. .-.. . --. .-. --- .-- .-.-.- ' ) print(english_plain_text)
我已經給出了從編碼函數生成的莫爾斯電碼。 如果我們運行上述程序,我們將得到以下輸出。
GEEKFLARE PRODUCES HIGH-QUALITY TECHNOLOGY & FINANCE ARTICLES, MAKES TOOLS, AND APIS TO HELP BUSINESSES AND PEOPLE GROW.
注意:輸出是英文大寫字母,因為我們在字典中使用了大寫字母進行映射。
最後的話
我們已經看到解碼函數的輸出是大寫的。 您可以通過跟踪英文字母的大小寫來使輸出在給定時間內保持不變,從而改進程序。 這與摩爾斯電碼無關,因為大寫和小寫具有相同的模式。 試試吧,因為它更有趣的編碼。
這就是本教程的內容。 下次遇到摩爾斯電碼時使用我們編寫的程序。
快樂編碼
您還可以查看如何在 Python 中創建隨機密碼。