【问题标题】:Avoid overlap when using replace [duplicate]使用替换时避免重叠[重复]
【发布时间】:2018-08-09 23:30:09
【问题描述】:

我正在玩一个简单的加密程序,我希望它能够工作,以便每个特定符号总是会变成另一个特定符号。这可能不是最好的描述,但我不知道该怎么说......例如:

“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"。

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

如何让程序按照我的预期加密消息?

【问题讨论】:

    标签: python python-3.x replace overlap


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      这个输出:

      hKW
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-19
        相关资源
        最近更新 更多