使用字典并在匹配键时打印出值,反之亦然

2024-02-18

我有一本字典,其中key是字母表中的一个字母,它是value是其对应的摩尔斯电码字母(例如”A”: “.-“)。我还有一个用户输入,我在其中放置消息。一旦他们按下回车键,它就会检查每个输入的字母,通过查看它是否在值或键中来确定它是莫尔斯电码还是英文字母。之后,我希望它打印相应的字母(例如,如果它发现“.-”,则会打印“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())

要将文本翻译为莫尔斯电码,只需map将字符串中的字符转换为相应的值translation字典:

>>> msg = "HELLO WORLD"
>>> morse = ' '.join(map(translation.get, msg))
>>> morse
'.... . .-.. .-.. ---    .-- --- .-. .-.. -..'

请注意,我用空格分隔了代码,否则几乎不可能将消息解码回来,因为某些序列可能会产生不同的字符组合。想要翻译回来,首先要逆字典;然后split按空格读取莫尔斯电文并从逆字典中获取值。

>>> trans_back = {v: k for k, v in translation.items()}
>>> ''.join(map(trans_back.get, morse.split()))
'HELLOWORLD'

但请注意,这删除了空格。要解决此问题,您可以使用与空格不同的符号来分隔莫尔斯电码序列。 或者使用这个稍微复杂的版本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

Note:这个答案是在将尾随空格添加到字典中的所有条目之前发布的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用字典并在匹配键时打印出值,反之亦然 的相关文章

随机推荐