在Python中使用字符串字典解码消息

2024-09-24 22:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用字典替换字符串中的值以解码消息时,如何将其放入以便函数不会将替换的值作为键读取并再次替换被替换的值?在

def decipher_message(translation_guide, message):
    t = read_translation_guide_into_dictionary(translation_guide)
    e = read_message(message)

    print(t)

    print(e)

    for key, value in t.items():
            f = e
            e = f.replace(key, value)

    return e

输出:

{'a': 'm', 'b': 'a', 'c': 'c', 'd': 'y', 'e': 't', 'f': 'v', 'g': 'o', 'h': 'u', 'i': 'x', 'j': 'e', 'k': 'j', 'l': 'w', 'm': 'f', 'n': 'z', 'o': 'd', 'p': 'l', 'q': 'i', 'r': 'k', 's': 'h', 't': 'n', 'u': 'g', 'v': 'b', 'w': 'q', 'x': 's', 'y': 'p', 'z': 'r'}

"qa mqtbppd vjqtu mghto! esbtr dgh mgz mqtoqtu aj gs rqto xezbtujz. q ahxe ejpp dgh, qex whqej vgzqtu sbfqtu bpp esj ljbpes qt esj lgzpo. qm dghzj pggrqtu mgz qe, q vhzqjo b aby eg qe bzghto lsjzj dghzj xebtoqtu tgl! zjajavjz esghus: ljbpes qxte jfjzdesqtu qt esj lgzpo!"

'"if finallp being fdgnd! nhank pdg fdr finding fe dh kind snranger. i fgsn nell pdg, ins qgine bdring habing all nhe qealnh in nhe qdrld. if pdgre lddking fdr in, i bgried a fap nd in ardgnd qhere pdgre snanding ndq! refefber nhdggh: qealnh isnn eberpnhing in nhe qdrld!"'


Tags: keyinmessagereadvalueqttranslationguide
2条回答

与其遍历字典并对整个字符串运行replace,不如遍历字符串并用dict中的值替换每个字符:

decoded = []
for letter in e:
    decoded.append(t.get(letter, letter))
return ''.join(decoded)

还请注意,Python有一个内置的string translate方法,它使用一个可以从dict生成的表:

^{pr2}$

可以将str.join与以下生成器表达式一起使用,该表达式将迭代字符串以转换每个字符:

def decipher(translation, message):
    t = read_translation(translation)
    e = read_message(message)
    return ''.join(t.get(c, c) for c in e)

相关问题 更多 >