我已经尝试解决这个问题几个小时了,我不知道怎么做。我不打算把问题写下来,只写我正在努力的部分。
假设我们有:
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
key = 'guwyrmqpsaeicbnozlfhdkjxtvGUWYRMQPSAEICBNOZLFHDKJXTV'
message = 'wncodhrlf'
如你所见,消息中的w等于c, n等于0,等等,所以消息拼出'computer'。我需要定义可以使用随机密钥解码/加密消息的函数,并且我被告知这是通过索引解决的。
如果你知道如何解决这个问题,请告诉我。我不需要你写一个代码,我只需要被引导到一个解决方案,因为我一直迷路。谢谢你的宝贵时间。简单翻译:
>>> message.translate(str.maketrans(key, letters))
'computers'
如果我理解正确的话,实际的字母和加密的字母在字母和关键变量中分别具有相同的索引。
所以要解析一个加密的字符串,你只需要遍历字符串的字母,在密钥字符串中找到每个字符的索引,然后在字母字符串中获得该索引处的字母。
例如,调用key.index('w')应该返回2。调用字母[2]将返回'c'。
要加密未加密的字符串,只需执行相反的操作。例如,要加密'c',调用letters.index('c'),它返回2。然后调用key[2]应该返回'w'。
首先,您需要访问消息中的每个字母。一种可能的方法是使用索引:
value = message[0]
从那里,你需要看到这个字母在钥匙的什么地方。Python中的字符串对象有几个辅助方法。
index = key.index("a") # Finds 9 as the index
现在你有了一个索引,在字母列表中找到相应的值就像使用索引一样简单:
decoded = letters[9] # Finds "j" in the list of letters
我把它留给你把它拼凑起来。
我要注意的是,其中很多都可以在文档中找到,它是相当容易接近的,我建议试着通读它。
使用字典的显式Python代码:
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
key = 'guwyrmqpsaeicbnozlfhdkjxtvGUWYRMQPSAEICBNOZLFHDKJXTV'
message = 'wncodhrlf'
assert len(letters) == len(key)
key_letter_mapping = {}
for i in range(len(key)):
key_letter_mapping[key[i]] = letters[i]
result = ''
for c in message:
result += key_letter_mapping[c]
print(result)