Python Challenge 谜题1

来源:互联网 发布:java开发中间件 编辑:程序博客网 时间:2024/04/30 12:02

这个题目我初一看是要我把K变为M,O变为Q,E变为G,后来才发现不是这样,难怪作者说:“everybody thinks twice before solving this.”

其实是要做一个类似编码解码的问题,就是把abcdefghijklmnopqrstuvwxyz变为cdefghijklmnopqrstuvwxyzab
有了这个思路就好做了
看代码

#-*- coding: utf-8 -*- 
__author__ = "hujinpu" 
  
import string 
  
#产生一个用来转换的编码表,是一个长为256bit的字符串 
table = string.maketrans(string.ascii_lowercase, string.ascii_lowercase[2:]+string.ascii_lowercase[:2]) 
  
oldstr 
= "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." 
  
#根据编码表变换字符串 
newstr = oldstr.translate(table) 
#作一定的格式化输出 
print (" ").join(newstr.split(".")) 
  
oldurl 
= "map" 
newurl 
= oldurl.translate(table)
还可以不用table

oldstr = "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." 
newstr 
= "" 
for x in oldstr: 
    
if ord(x) >= ord('a'and ord(x) <= ord('z'): 
        newstr 
+= chr((ord(x) + 2 - ord('a')) % 26 + ord('a')) 
    
else
        newstr 
+= x 
print (" ").join(newstr.split("."))