用字典值解密歌曲



嗨,我想解密下面的歌曲,但是当我替换一些单词时而我一直在字典键中向前移动,我就失去了我的替代者。

例如,当'O'变为'A'时,它是可以的,但是,当代码继续时'A' = 'U'中的字典值。所以我失去了正确的替换,我得到了一个错误的答案。

decryption_key = {
'O': 'A', 'D': 'B', 'F': 'C', 'I': 'D', 'H': 'E',
'G': 'F', 'L': 'G', 'C': 'H', 'K': 'I', 'Q': 'J',
'B': 'K', 'J': 'L', 'Z': 'M', 'V': 'N', 'S': 'O',
'R': 'P', 'M': 'Q', 'X': 'R', 'E': 'S', 'P': 'T',
'A': 'U', 'Y': 'V', 'W': 'W', 'T': 'X', 'U': 'Y',
'N': 'Z',
}
SONG = """
sc, kg pchxh'e svh pckvl k covl svps
pcop lhpe zh pcxsalc pch vklcp
k okv'p lsvvo is wcop k isv'p wovp ps
k'z lsvvo jkyh zu jkgh
eckvkvl jkbh o ikozsvi, xsjjkvl wkpc pch ikfh
epovikvl sv pch jhilh, k ecsw pch wkvi csw ps gju
wchv pch wsxji lhpe kv zu gofh
k eou, coyh o vkfh iou
coyh o vkfh iou
"""

SONG = SONG.upper()
for word, value in decryption_key.items():
if word in SONG:
SONG = SONG.replace(word, value)
else:
continue
print(SONG)

一个变通办法是:

SONG = SONG.replace(word, value.lower())

这样,被替换的字母将被小写,以后不受影响。

但是正确的方法是构造一个新的字符串:

SONG = ''.join(decryption_key.get(c, c) for c in SONG)

这只是替换整个循环。

decryption_key.get(c, c)部分可能令人困惑,但它所做的是,如果给定的键存在于decryption_key中,则返回该键的值,否则返回键本身(因为它被第二个参数指定为默认值)。

相关内容

  • 没有找到相关文章

最新更新