停止ord()使用字母caesar cyph以外的字符

2024-04-26 14:19:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python3.2中创建一个非常简单的caesar密码,并且已经获得了大部分代码。你知道吗

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”,它变成“{|}”。我该如何改变它,使它只使用字母表?你知道吗


Tags: to代码you密码messageinputwhatlike
1条回答
网友
1楼 · 发布于 2024-04-26 14:19:22

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

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

这将返回字母表中以零为基础的索引。例如,字母a返回0b返回1,等等

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

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

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

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

相关问题 更多 >