我一般都不熟悉编程,因此无法弄清楚如何替换字符串中的多个字符。使用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"
这是我能想到的最好方法,但是它不起作用。我环顾了其他问题,答案太混乱了。请帮助并解释我在做什么错。
答案 0 :(得分:2)
对于python 3,您可以使用str.maketrans
和str.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)
希望这会有所帮助。