将字符串中的字符平移n位,就是凯撒密码.比如此处的后移两位,a变为c,z变为b,以此类推,只换字母其它字符不变.
#!/usr/bin/python3
str=r"g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
new_str=''
shift = 2
for i in str:
if i>='a' and i<='z': # or i>='A'and i<='Z':
i=ord(i)
i = ((i + shift)-97)%26+97
i = chr(i)
new_str=new_str+i
print(new_str)
其中**ord()**将字符转为ascii码,**chr()**将ascii码转为字符
得到的输出为:
i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.
这里提示用string.maketrans,
#!/usr/bin/python
import string
intab='abcdefghijklmnopqrstuvwxyz'
outtab='cdefghijklmnopqrstuvwxyzab'
transtab=string.maketrans(intab,outtab) #transtab就是解密表
ciphertext=r"g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj."
plaintext=ciphertext.translate(transtab)
print(plaintext)
参考文档:a b