使用替换时避免重叠

时间:2018-08-09 15:13:47

标签: python python-3.x replace overlap

我正在研究一个简单的加密程序,并且我希望它能够正常工作,以便每个特定的符号始终会变成另一个特定的符号。那可能不是最好的描述,但是我不知道该怎么写...例如:

“ a”将是“ h”

“ A”将是“ k”

“ h”将是“ W”

text_1 = "aAh"

text_2 = text_1.replace('a', 'h')
text_3 = text_2.replace('A', 'K')
text_4 = text_3.replace('h', 'W')

print text_4

#the output is "WKW"
#I need the output to be "hKW"

问题是,我对每个符号替换都使用了replace-command,因此,如果我们假设代码以与示例相同的顺序键入,并且我想加密的消息是“ aAh “,那么我希望加密后的输出为“ hKW”,但实际上我们得到的是“ WKW”。

我知道为什么会这样,所以我的问题是:

我如何获得程序以预期的方式对消息进行加密?

2 个答案:

答案 0 :(得分:0)

您遇到的问题是您将更改应用于中间字符串(因此先前的更改将影响结果)

考虑尝试计算每个字符在初始字符串上的预期更改,并在此之后构建最终字符串。

答案 1 :(得分:0)

您可以将dict用于字符映射,然后使用生成器表达式来翻译字符:

-Dkotlinx.coroutines.blocking.checker=disable

这将输出:

m = {'a': 'h', 'A': 'K', 'h': 'W'}
print(''.join(m.get(c, c) for c in text_1))