从摩尔斯电码错误翻译成英文的字符
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
我开始将摩尔斯电码翻译成英文,但出现问题。这是我的代码:
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