我想用下一个字符替换字符串的每个字符,最后一个字符应该成为第一个字符。这是一个例子:
abcdefghijklmnopqrstuvwxyz
应该成为:
bcdefghijklmnopqrstuvwxyza
是否可以在不使用替换功能的情况下进行26次?
答案 0 :(得分:9)
您可以使用str.translate()
method让Python在一个步骤中替换其他字符。
使用string.maketrans()
function将ASCII字符映射到目标;使用string.ascii_lowercase
可以帮助您,因为它可以节省您自己输入所有字母的信息:
from string import ascii_lowercase
try:
# Python 2
from string import maketrans
except ImportError:
# Python 3 made maketrans a static method
maketrans = str.maketrans
cipher_map = maketrans(ascii_lowercase, ascii_lowercase[1:] + ascii_lowercase[:1])
encrypted = text.translate(cipher_map)
演示:
>>> from string import maketrans
>>> from string import ascii_lowercase
>>> cipher_map = maketrans(ascii_lowercase, ascii_lowercase[1:] + ascii_lowercase[:1])
>>> text = 'the quick brown fox jumped over the lazy dog'
>>> text.translate(cipher_map)
'uif rvjdl cspxo gpy kvnqfe pwfs uif mbaz eph'
答案 1 :(得分:4)
当然,只需使用字符串切片:
>>> s = "abcdefghijklmnopqrstuvwxyz"
>>> s[1:] + s[:1]
'bcdefghijklmnopqrstuvwxyza'
基本上,您要执行的操作类似于将字符的位置向左旋转一个位置。因此,我们可以简单地在第一个字符之后取出字符串的一部分,并将第一个字符添加到其中。
编辑 :我认为OP要求旋转一个字符串(从他给定的输入中可信,输入字符串有26个字符,他可能已经为每个角色进行了手动替换),如果帖子是关于创建密码的话,请查看@ Martjin上面的答案。
答案 2 :(得分:0)
因为Python中的字符串是不可变的,所以需要将字符串转换为列表,替换,然后转换回字符串。我在这里使用modulo。
def convert(text):
lst = list(text)
new_list = [text[i % len(text) +1] for i in lst]
return "".join(new_list)
不要使用切片,因为这样效率不高。 Python将为每个更改的char创建新的完整拷贝字符串,因为字符串是不可变的。