如何正确替换字符串中的字符?

时间:2019-07-09 18:15:45

标签: python python-3.x

我一般都不熟悉编程,因此无法弄清楚如何替换字符串中的多个字符。使用string.replace("x", "y")函数,我尝试制作一个简单的编码器:

phrase = "abcdef"
phrase.replace("a", "b")
phrase.replace("b", "c")
phrase.replace("c", "d")
phrase.replace("d", "e")
phrase.replace("e", "f")
phrase.replace("f", "g")

print(phrase)

我期望输出为:

"bcdefg"

但是得到了

"abcdef"

这是我能想到的最好方法,但是它不起作用。我环顾了其他问题,答案太混乱了。请帮助并解释我在做什么错。

5 个答案:

答案 0 :(得分:2)

对于python 3,您可以使用str.maketransstr.translate(下面的链接)-对于python 2,您可以在string模块内找到它们:

# from string import maketrans, translate # python 2, in python 3 they are on str

trans = str.maketrans("abcdef","bcdefg")

phrase = "abcdef"

print(str.translate(phrase, trans)) # outputs: bcdefg

请参见

答案 1 :(得分:0)

您必须将字符串替换为phrase.replace()的输出。由于phrase是字符串,因此不会更新,因为字符串是不可变的。您还必须更改替换顺序,否则将得到gggggg

phrase = "abcdef"
phrase = phrase.replace("f", "g")
phrase = phrase.replace("e", "f")
phrase = phrase.replace("d", "e")
phrase = phrase.replace("c", "d")
phrase = phrase.replace("b", "c")
phrase = phrase.replace("a", "b")

print(phrase)
bcdefg

答案 2 :(得分:0)

replace函数返回一个 new 字符串,该字符串是上一个替换了字符的字符串的副本,因此您的代码应为@depperm所述:

phrase = phrase.replace("f", "g").replace("e", "f").replace("d", "e").replace("c", "d").replace("b", "c").replace("a", "b")

答案 3 :(得分:0)

快速为您搜索并找到了这个Change each character in string to the next character in alphabet

@dawg放在这里:

from string import ascii_lowercase as letters

s='abcxyz'
ns=''
for c in s:
    if c in letters:
        ns=ns+letters[(letters.index(c)+1)%len(letters)]
    else:
        ns+=c

测试并正常工作, ns 的值为'bcdyza'

答案 4 :(得分:0)

如果您想学习python,则可以在python repl中使用它。在这种情况下,replace方法没有任何问题,这是您的逻辑不正确。因此,让我们看看REPL中发生了什么。

>>> phrase = "abcdef"
>>> phrase.replace("a", "b")
'bbcdef'
>>> phrase.replace("b", "c")
'accdef'
>>> phrase.replace("c", "d")
'abddef'
>>> phrase.replace("d", "e")
'abceef'
>>> phrase.replace("e", "f")
'abcdff'
>>> phrase.replace("f", "g")

这种凯撒密码的正确算法应该是这样的。

s = ''
for i in range(len(phrase)):
   s += chr(ord(phrase[i])+1)

希望这会有所帮助。