我试图在python 3.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,而是继续到符号等所以" xyz"偏移量为3,而不是" abc"它变成" {|}"。如何更改此选项以便仅使用字母表?
答案 0 :(得分:1)
首先,调整ord()
的返回值,使其代表字母表中的偏移量。我在这里将所有内容转换为小写以简化代码;如果你想保留它,可以为大写和小写创建单独的大小写。
index = ord(aMessage[i].lower())) - ord('a')
这会将一个从零开始的索引返回到字母表中。例如,字母a
返回0
,b
返回1
等。
然后使用此值+您的偏移量作为字母数组的索引:
import string
letters = string.ascii_lowercase + string.ascii_lowercase
replacement = letters[index + offset]
通过创建包含字母表的数组letters
- 两次 - 我们可以简单地添加任意偏移量,甚至可以添加到字母表末尾的字母,并获得正确的替换值。
这显然只适用于ASCII字符集,并且不保留大小写,但它应该足以让你开始。