当前位置: 代码迷 >> python >> str.replace()python程序加密问题
  详细解决方案

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

热度:51   发布时间:2023-06-21 11:00:53.0

我在此程序中要将普通消息转换为加密的消息。 在程序中,它用相反的字母替换每个字母。 当它从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])

让我们逐步了解这段代码中发生的事情。 假设c是字符串“ yabz”。

c = "yabz"

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

c = "yzbz"

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

c = "yzyz"

现在,当您开始替换“ y”和“ z”时,某些字母会变回它们的开头:

c = c.replace("y","b") #c is now "bzbz"
c = c.replace("z","a") #c is now "baba"

如此一来,您可以将字母表前半部分的字母正确转换为后半部分的字母,但是您不小心将它们改了回来。 您可以从输出中看到,因此,字母表的后半部分没有字母出现。 由于这看起来像一个练习,因此您应该尝试自己解决问题,但是这里有一个可能的解决方案:

 s = "I am noob" import string letters = string.ascii_lowercase # construct a dictionary mapping from a letter to its dual opposite starting from the end # of the alphabet table rep_dict = dict(zip(letters, letters[::-1])) # use the dictionary to replace the letters ''.join(map(rep_dict.get, s.replace(" ", "").lower())) # 'rznmlly' 

资料来源: :

  相关解决方案