str.replace()python程序加密问题

str.replace()python程序加密问题,python,replace,Python,Replace,我有一个程序,我想把一条普通的信息转换成一条加密的信息。在程序中,它用每个字母的对立面替换每个字母。当它从 c=c.replace('n','m')然后它将替换它以前替换的所有对象 def convert(c): c = c.replace('a', 'z') c = c.replace('b', 'y') c = c.replace('c', 'x') c = c.replace('d', 'w') c = c.replace('e', 'v')

我有一个程序,我想把一条普通的信息转换成一条加密的信息。在程序中,它用每个字母的对立面替换每个字母。当它从
c=c.replace('n','m')
然后它将替换它以前替换的所有对象

def convert(c):
    c = c.replace('a', 'z')
    c = c.replace('b', 'y')
    c = c.replace('c', 'x')
    c = c.replace('d', 'w')
    c = c.replace('e', 'v')
    c = c.replace('f', 'u')
    c = c.replace('g', 't')
    c = c.replace('h', 's')
    c = c.replace('i', 'r')
    c = c.replace('j', 'q')
    c = c.replace('k', 'p')
    c = c.replace('l', 'o')
    c = c.replace('m', 'n')
    c = c.replace('n', 'm')
    c = c.replace('o', 'l')
    c = c.replace('p', 'k')
    c = c.replace('q', 'j')
    c = c.replace('r', 'i')
    c = c.replace('s', 'h')
    c = c.replace('t', 'g')
    c = c.replace('u', 'f')
    c = c.replace('v', 'e')
    c = c.replace('w', 'd')
    c = c.replace('x', 'c')
    c = c.replace('y', 'b')
    c = c.replace('z', 'a')
    return c
print(convert('the quick brown fox jumps over the lazy dog'))
输出为:

ghe jfick bildm flc jfmkh leei ghe laab dlg
它不会转换所有的字母。
有人能帮忙吗?

您应该使用
str.translate()
,因为它接受映射并同时应用所有字符:

def convert(c):
    return c.translate(mapping)
您可以按如下方式创建映射:

mapping = {
    ord('a'): 'z',
    ord('b'): 'y',
    ...
}
但幸运的是,python还提供了
maketrans()
函数来帮助您进行映射:

mapping = str.maketrans(string.ascii_lowercase, string.ascii_lowercase[::-1])

您应该使用
str.translate()
,因为它接受映射并同时应用所有字符:

def convert(c):
    return c.translate(mapping)
您可以按如下方式创建映射:

mapping = {
    ord('a'): 'z',
    ord('b'): 'y',
    ...
}
但幸运的是,python还提供了
maketrans()
函数来帮助您进行映射:

mapping = str.maketrans(string.ascii_lowercase, string.ascii_lowercase[::-1])

让我们逐步了解一下代码中发生了什么。假设c是字符串“yabz”

将“a”的所有实例替换为“z”

将“b”的所有实例替换为“y”

现在,当您开始替换“y”和“z”时,一些字母会变回原来的字母:

c = c.replace("y","b") #c is now "bzbz"
c = c.replace("z","a") #c is now "baba"
因此,将字母表前半部分的字母正确转换为后半部分的字母,但意外地将其更改回原来的位置。您可以从输出中看到,由于这个原因,字母表的后半部分没有显示字母。由于这看起来像一个练习,您应该尝试自己解决问题,但这里有一个可能的解决方案:


来源:

让我们逐步了解一下这段代码中发生了什么。假设c是字符串“yabz”

将“a”的所有实例替换为“z”

将“b”的所有实例替换为“y”

现在,当您开始替换“y”和“z”时,一些字母会变回原来的字母:

c = c.replace("y","b") #c is now "bzbz"
c = c.replace("z","a") #c is now "baba"
因此,将字母表前半部分的字母正确转换为后半部分的字母,但意外地将其更改回原来的位置。您可以从输出中看到,由于这个原因,字母表的后半部分没有显示字母。由于这看起来像一个练习,您应该尝试自己解决问题,但这里有一个可能的解决方案:


来源:

字母表中间之前的字母将更改为中间之后的字母,因此将再次更改回中间。中间后面的字母没有机会换回来。e、 例如,
h->s->h
,但是
t->g
可以将“s”替换为“h”,然后将“h”替换为“s”。此外,“l”由“o”变为“l”,然后“o”立即变为“l”,依此类推。字母表中间位置之前的字母会变为中间位置之后的字母,因此会再次变回。中间后面的字母没有机会换回来。e、 例如,
h->s->h
,但是
t->g
可以将“s”替换为“h”,然后将“h”替换为“s”。还有,“l”是“o”,然后“o”是“l”,等等。