将alphet中的字母重新分配给python中的更高字母?

时间:2014-04-19 03:38:31

标签: python

如果我在python中构建一个基本加密程序,将A重新分配给C,将D重新分配给F等等,我可以使用什么简单的算法来做到这一点? 我有一个名为alphabet的列表,用于保存每个字母,然后是一个变量,它接受用户输入以更改为加密版本。

2 个答案:

答案 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。瞧。