Python 2中的一个简单替换密码

时间:2014-06-05 00:04:48

标签: python encryption

下面的代码将明文消息的每个字母移位2个字母表中的位置。问题是这个代码没有循环回到字母y和z或Y和Z之后的字母表开头。我一直试图解决这个问题。我该怎么做才能解决这个问题?

msg = raw_input("any string goes here")

cypher = ""

for a in msg:

     cypher = cypher + chr(ord(a) + 2)

print cypher 

3 个答案:

答案 0 :(得分:3)

您可以使用string模块制作自己的ascii字母列表。然后,您不必担心ord方法涉及的所有其他unicode字符。小写ascii字母的示例是:

import string
msg = raw_input("any string goes here")

cypher = ""
#creates a alphabet of lowercase ascii characters
alphabet = string.ascii_lowercase

for a in msg:

    cypher = cypher + alphabet[((alphabet.index(a) + 2) % 26)]

print cypher 

或者,如果你真的开始使用ord方法,你可以使用它:

 cypher = cypher + chr(((ord(a) - 95) % 26) + 97)

为了更好地解释这一点,在unicode中,字母表从索引97(97 =“a”)开始,结束索引122(122 =“z”)。因此,通过减去95,我实际上将字母索引增加了两个。然后处理包装到我们使用的开始问题 % 26以便索引始终在0到25之间。然后我最后添加了97,以便索引返回到unicode字母的97到122范围内。

答案 1 :(得分:0)

cypher = cypher + chr((ord(a) + 2) % 26)

答案 2 :(得分:0)

我建议调查模运算符。

可能是这样的:     cypher + chr((ord(a)+ 2)%26