如果我在python中构建一个基本加密程序,将A重新分配给C,将D重新分配给F等等,我可以使用什么简单的算法来做到这一点? 我有一个名为alphabet的列表,用于保存每个字母,然后是一个变量,它接受用户输入以更改为加密版本。
答案 0 :(得分:3)
str.translate应该是最简单的方法:
table = str.maketrans(
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
"cdefghijklmnopqrstuvwxyzabCDEFGHIJKLMNOPQRSTUVWXYZAB"
)
s = "Test String"
print(s.translate(table))
输出:
Vguv Uvtkpi
答案 1 :(得分:2)
这有两个主要部分。首先,加密一个字母;第二,将其应用于整个字符串。我们将从第一个开始。
你说你有一个包含字母表的列表。也假设我们有一封信。
>>> letter = 'F'
如果我们想用字母表中的两个字母替换那个字母,首先我们可能想要找到那个字母的数值。为此,请使用index
:
>>> alphabet.index(letter)
5
接下来,您可以向其添加偏移量并再次在列表中访问它:
>>> alphabet[alphabet.index(letter) + 2]
'H'
但是等等,如果我们尝试写一个像Z
这样的字母,这将无效,因为当我们添加索引时,我们将离开列表的末尾并得到错误。所以我们将在获得新信之前包装价值:
>>> alphabet[(alphabet.index('Z') + 2) % len(alphabet)]
'B'
所以现在我们知道如何更换一个字母。 Python可以很容易地将它应用于整个字符串。首先将我们的单字母版本放入函数中:
>>> def cipher_letter(letter):
... return alphabet[(alphabet.index(letter) + 2) % len(alphabet)]
...
我们可以使用map
将其应用于序列。然后我们得到一个可迭代的加密字符,我们可以将它们连接成一个字符串。
>>> ''.join(map(cipher_letter, 'HELLOWORLD'))
'JGNNQYQTNF'
如果您希望不在alphabet
中保留字符,请在cipher_letter
中添加一项测试,以确保letter in alphabet
先行,如果不是,则return letter
。瞧。