首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用字典,匹配键时打印出值,反之亦然。

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

Stack Overflow用户
提问于 2018-05-05 20:11:25
回答 4查看 296关注 0票数 3

我有一本字典,key是字母表中的字母,value是对应的莫尔斯电码(例如”A”: “.-“)。我也有一个用户输入,在那里,我把用户的信息。一旦他们按enter,它就会检查每个输入字母是用Morse代码还是英文字母,看看它是在值还是键中。在此之后,我希望它再打印其相应的字母(例如,如果它发现“.-”,“A”将被打印)。我该怎么做?

到目前为止,我的代码如下:

代码语言:javascript
运行
复制
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())
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-05 20:32:07

要将文本翻译为morse,只需将字符串中的字符maptranslation字典中的相应值:

代码语言:javascript
运行
复制
>>> msg = "HELLO WORLD"
>>> morse = ' '.join(map(translation.get, msg))
>>> morse
'.... . .-.. .-.. ---    .-- --- .-. .-.. -..'

请注意,我用空格分隔代码,否则将几乎不可能将消息解码回来,因为某些序列可能在不同的字符组合中产生。对于返回的翻译,您必须首先逆字典;然后通过空间split morse消息,并从逆字典中获得值。

代码语言:javascript
运行
复制
>>> trans_back = {v: k for k, v in translation.items()}
>>> ''.join(map(trans_back.get, morse.split()))
'HELLOWORLD'

不过,请注意,这删除了空间。要解决这个问题,您可以使用与空间不同的符号来分离morse代码序列。或者使用这个稍微复杂一些的版本--使用re.split在一个空间中拆分--只有当这个空格没有后面,或者前面没有另一个空格:

代码语言:javascript
运行
复制
>>> ''.join(map(trans_back.get, re.split("(?<! ) | (?! )", morse)))
'HELLO WORLD'

为了决定用哪种方式翻译,即原始文本是莫尔斯还是纯文本,只需检查字符串的第一个字符或所有字符是否在translation字典中,或者它们是否是有效的莫尔斯符号:

代码语言:javascript
运行
复制
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中的所有条目添加尾随空格之前发布的。

票数 2
EN

Stack Overflow用户

发布于 2018-05-05 20:31:59

您必须检查这是一条莫尔斯消息还是一条“alpha”消息:

代码语言:javascript
运行
复制
 # 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 ))
票数 1
EN

Stack Overflow用户

发布于 2018-05-05 20:20:53

在这种情况下,从一封信翻译到莫尔斯电码相当简单。您只需使用键访问该值,并将每个字符串值连接到另一个字符串。见下文:

代码语言:javascript
运行
复制
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。一种简单而廉价的方法就是制作两个翻译表,并使用与英语莫尔斯相同的逻辑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50193618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档