簡體   English   中英

從摩爾斯電碼錯誤地翻譯成英語的字符

[英]Characters incorrectly translated from Morse Code to English

我開始將摩爾斯電碼翻譯成英語,但出現了一個問題。 這是我的代碼:

morse_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': '--..',
}

def morse_decrypt(message):
    m1 = message.split()
    new_str = []
    letter = ''
    for i,n in morse_dict.items():
        if n in m1:
            letter = str(i)
            new_str.append(letter)
    return ''.join(new_str)
print(morse_decrypt('... --- ...'))
>>>os

但是當我嘗試使用函數時,它會將每個字符打印一次。 我不知道是什么問題。 我做錯了什么?

您的morse_dict將字母轉換為摩爾斯電碼字母。 但是你想要相反,因為你試圖解密而不是加密。 要么重寫你的字典,要么使用

morse_to_alpha = dict(map(reversed, morse_dict.items()))

翻轉鍵值對。

完成后,您可以在翻譯詞典中查找每個消息塊(而不是相反):

def morse_decrypt(message):
    morse_to_alpha = dict(map(reversed, morse_dict.items()))
    return "".join(map(morse_to_alpha.get, message.split()))

這仍然會破壞封裝。 morse_to_alpha應該成為一個參數,這樣你就不會訪問全局狀態,並且為每個翻譯翻轉字典是浪費的。 我會把這些調整留給你處理。

也不清楚如何處理錯誤; 如果摩爾斯電碼無效,這將引發(未特別明確命名)異常。

您有一個以鍵為字母、以代碼為值的字典。

Python 字典是通過鍵而不是值來查找的(不幸的是),但是您可能會發現有一種方法可以解決這個問題。 像您一樣將字典放入字母和代碼的項目中,但將代碼放在第一個 FOR 循環中查找。 :)

def morse_decrypt(message):
    global morse_dict
    msgList = message.split(" ")
    msgEnglish = ""
    for codeLookup in msgList:
        for letter, code in morse_dict.items():
            if(code == codeLookup):
                msgEnglish += letter
    return msgEnglish


print(morse_decrypt('... --- ...'))

參考: 在字典中按值獲取鍵https://www.w3schools.com/python/python_dictionaries.asp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM