从摩尔斯电码错误翻译成英文的字符

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 应该成为一个参数,这样你就不会访问全局状态,并且每次翻译都要翻转 dict 是一种浪费。我会将这些调整留给您处理。

还不清楚如何处理错误;如果摩尔斯电码无效,这会引发一个(没有特别明确命名的)异常。

你有一个以键为字母、代码为值的字典。

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('... --- ...'))

参考资料: Get key by value in dictionary https://www.w3schools.com/python/python_dictionaries.asp