首页 > 解决方案 > str.replace() python程序加密问题

问题描述

我有这个程序,我想将普通消息转换为加密消息。在程序中,它将每个字母替换为相反的字母。当它 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

它不会转换所有字母。有人可以帮忙吗?

标签: pythonreplace

解决方案


您应该使用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])

推荐阅读