我有一本字典,key是字母表中的字母,value是对应的莫尔斯电码(例如”A”: “.-“)。我也有一个用户输入,在那里,我把用户的信息。一旦他们按enter,它就会检查每个输入字母是用Morse代码还是英文字母,看看它是在值还是键中。在此之后,我希望它再打印其相应的字母(例如,如果它发现“.-”,“A”将被打印)。我该怎么做?
到目前为止,我的代码如下:
translation = {
"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": "--..",
" ": " "
}
user_input = input("Input english or morse code message:\n").upper()
for i in user_input:
if i in translation.keys():
print(translation.values())
if i in translation.values():
print(translation.keys())发布于 2018-05-05 20:32:07
要将文本翻译为morse,只需将字符串中的字符map为translation字典中的相应值:
>>> msg = "HELLO WORLD"
>>> morse = ' '.join(map(translation.get, msg))
>>> morse
'.... . .-.. .-.. --- .-- --- .-. .-.. -..'请注意,我用空格分隔代码,否则将几乎不可能将消息解码回来,因为某些序列可能在不同的字符组合中产生。对于返回的翻译,您必须首先逆字典;然后通过空间split morse消息,并从逆字典中获得值。
>>> trans_back = {v: k for k, v in translation.items()}
>>> ''.join(map(trans_back.get, morse.split()))
'HELLOWORLD'不过,请注意,这删除了空间。要解决这个问题,您可以使用与空间不同的符号来分离morse代码序列。或者使用这个稍微复杂一些的版本--使用re.split在一个空间中拆分--只有当这个空格没有后面,或者前面没有另一个空格:
>>> ''.join(map(trans_back.get, re.split("(?<! ) | (?! )", morse)))
'HELLO WORLD'为了决定用哪种方式翻译,即原始文本是莫尔斯还是纯文本,只需检查字符串的第一个字符或所有字符是否在translation字典中,或者它们是否是有效的莫尔斯符号:
if all(c in translation for c in msg):
# translate to morse
elif all(c in ".- " for c in msg):
# translate back
else:
# don't know what to do注释:这个答案是在dict中的所有条目添加尾随空格之前发布的。
发布于 2018-05-05 20:31:59
您必须检查这是一条莫尔斯消息还是一条“alpha”消息:
# build a reversed dict
translation_from_morse = {v: k for k, v in translation.items()}
user_input = input("Input english or morse code message:\n").upper()
if user_input[0] in ".-":
print(" ".join("".join(translation_from[morse] for morse in part.split(" ")) for part in user_input .split(" ")))
else:
print(" ".join(translation_to.get(c, c) for c in user_input ))发布于 2018-05-05 20:20:53
在这种情况下,从一封信翻译到莫尔斯电码相当简单。您只需使用键访问该值,并将每个字符串值连接到另一个字符串。见下文:
user_input = input("Input english to translate to morse code: ")
morse_code_message = ""
for i in user_input:
if i in translation.keys():
morse_code_message += translation[i]
print(morse_code_message)然而,字典并不打算反过来使用。所以莫尔斯对英语将是不同的。您必须搜索字典值。如果您一定要这样做,请参阅this post。一种简单而廉价的方法就是制作两个翻译表,并使用与英语莫尔斯相同的逻辑。
https://stackoverflow.com/questions/50193618
复制相似问题