0

我正在尝试在 python 3.2 中制作一个非常简单的凯撒密码,并且已经获得了大部分代码。

aEnd = ""
        aOffset = int(input("What would you like the offset of your message to be?:\n"))
        aMessage = input("What message would you like to encrypt?:\n")
        for i in range(len(aMessage)):
            eAscii=ord(aMessage[i])
            aEnd = aEnd + chr(eAscii + aOffset)     
print(aEnd)    

然而,当它超过 z 时,它不是直接回到 a,而是继续到符号等,所以偏移量为 3 的“xyz”,而不是“abc”,它变成了“{|}”。我该如何改变它,使它只使用字母表?

4

1 回答 1

1

首先,调整 的返回值ord(),使其代表字母表中的偏移量。为了简化代码,我在这里将所有内容都转换为小写;如果你想保留它,你可以为大写和小写创建单独的案例。

index = ord(aMessage[i].lower())) - ord('a')

这会在字母表中返回一个从零开始的索引。例如,字母return ,areturns等。0b1

然后使用此值 + 您的偏移量作为字母数组的索引:

import string
letters = string.ascii_lowercase + string.ascii_lowercase
replacement = letters[index + offset]

通过创建一个包含字母的数组letters——两次——我们可以简单地添加一个任意偏移量,甚至是字母表末尾的字母,并获得正确的替换值。

这显然只适用于 ASCII 字符集并且不保留大小写,但它应该足以让你开始。

于 2015-05-05T13:31:50.240 回答