Python字典凯撒:查找一个数值,+1,然后返回其关联键

这是一个非常有趣的凯撒密码问题。

这是我的字典:

**{'v': 22, 'g': 7, 'w': 23, 'h': 8, 'a': 1, 'm': 13, 'c': 3, 'o': 15, 'd': 4, 's': 19, 'r': 18, 'u': 21, 'j': 10, 't': 20, 'f': 6, 'k': 11, 'y': 25, 'z': 26, 'l': 12, ' ': 0, 'b': 2, 'e': 5, 'q': 17, 'n': 14, 'i': 9, 'p': 16, 'x': 24}**

显然,字典是无序的。它们不是按字母顺序或数字顺序排列的,而是成对排列的。

我必须:

  1. 在这本字典中查找字符串中的每个字母(“嗨,我的名字是凯撒”)

  2. 返回一个编码的消息。如果字母是“a”,则这是字典中的值 1。但是,我的代码是打印字典中值为 2 的字母“b”。

我见过使用列表的凯撒示例(可以由我订购),但并没有尝试以这种方式导航字典......

我会在弄清楚这一点后立即发布我的答案。目前我只是对此感到困惑。写下来有助于阐明可能需要的步骤。

注意,如果代码正常工作,我认为“”会变成“a”。

预期输出:“ijanzaobnajtadbftbt”


互换的青春
浏览 186回答 3
3回答

呼如林

好的,这是我的看法d = {'v': 22, 'g': 7, 'w': 23, 'h': 8, 'a': 1, 'm': 13, 'c': 3, 'o': 15, 'd': 4, 's': 19, 'r': 18, 'u': 21, 'j': 10, 't': 20, 'f': 6, 'k': 11, 'y': 25, 'z': 26, 'l': 12, ' ': 0, 'b': 2, 'e': 5, 'q': 17, 'n': 14, 'i': 9, 'p': 16, 'x': 24}sentence = 'hi my name is caesar'for char in ''.join(sentence.split()):    print(d[chr(ord(char) + 1)], end=' ')输出9 10 14 26 15 2 14 6 10 20 4 2 6 20 2 19 

沧海一幻觉

您可以创建一个反向字典并使用它来构建您的加密字符串。反向字典将有助于查找与给定字符的“下一个”数字对应的字符:d = {'v': 22, 'g': 7, 'w': 23, 'h': 8, 'a': 1, 'm': 13, 'c': 3, 'o': 15, 'd': 4, 's': 19, 'r': 18, 'u': 21, 'j': 10, 't': 20, 'f': 6, 'k': 11, 'y': 25, 'z': 26, 'l': 12, ' ': 0, 'b': 2, 'e': 5, 'q': 17, 'n': 14, 'i': 9, 'p': 16, 'x': 24}reverse_d = {v: k for k, v in d.items()}sentence = 'hi my name is caesar'encrypted = ''.join([reverse_d.get(d[c] + 1, reverse_d[0]) for c in sentence])print(encrypted)# ijanzaobnfajtadbftbs请注意,0如果在reverse_d.

冉冉说

如果字典总是只表示字母表中字符的数量,你甚至不需要字典,这是一个单行:sentence = 'hi my name is caesar'encoded = ''.join([chr(ord(c)+1) if ord(c)>96 and ord(c)<122 else "a" for c in sentence])这给In [14]: encodedOut[14]: 'ijanzaobnfajtadbftbs'但对于一般的解决方案,滑块的方法是最优雅的,我会说。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python