http://wiki.pythonchallenge.com/index.php?title=Main_Page
/home/admin/---/pythonRiddle
http://www.pythonchallenge.com/pc/def/0.html
>>> 2**38 274877906944
http://www.pythonchallenge.com/pc/def/map.html
最好的办法:
# -* - coding: UTF-8 -* - #使用string模块的maketrans和translate来解决凯撒密码 import string str1 = "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.kyicrp ylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj." str2 = "map" table = string.maketrans(string.ascii_lowercase,string.ascii_lowercase[2:]+string.ascii_lowercase[:2]) print string.translate(str1,table) print string.translate(str2,table)
# -* - coding: UTF-8 -* - #python对字符的处理,凯撒密码, str = "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." str2 = "map" def decode(c): if ord(c)>=ord("a") and ord(c)+2<=ord("z"): return chr(ord(c)+2) elif c=="y" or c=="z": return chr(ord(c)+1-ord("z")+ord("a")) else : return c hint = "" for c in str: hint+=decode(c) print hint answer = "" for c in str2: answer+=decode(c) print answer
http://www.pythonchallenge.com/pc/def/ocr.html
# -* - coding: UTF-8 -* - #python对字符的处理 import os,sys,urllib def download(url): data=urllib.urlopen(url).read() begin = data.find("find rare characters in the mess below:") begin+=40 key = data[begin:] answer = "" for char in key: if char.isalpha(): answer += char print answer if __name__ == "__main__": if len(sys.argv) != 2: print "Usage: %s <args>" % sys.argv[0] exit(1) url = sys.argv[1] download(url)
http://www.pythonchallenge.com/pc/def/equality.html
刚开始以为是四面八方都恰好三个,没看图可能。结果是y
# -* - coding: UTF-8 -* - #换行,结尾加"\" #三元操作符 V1 if X else V2 import os,sys,urllib def download(url): data=urllib.urlopen(url).read() strBegin = "kAewtloYgcFQaJNhHVGxXDiQmzjfcpYbzxlWrVcqsmUbCunkfxZWDZjUZMiGqhRRiUvGmYmvnJIHEmbT" strEnd = "-->" begin = data.find(strBegin) end = data.find(strEnd) end-=1 content = data[begin:end] lines = content.split("\n") answer = "" #这样处理了0到79,其可以使用序号 for i in range(len(lines)): for j in range(len(lines[i])): if (i!=0) and (i!=len(lines)-1) and (j!=0) and (j!=len(lines[0])-1) : if lines[i-1][j-1].isupper()and lines[i-1][j].isupper()and lines[i-1][j+1].isupper()\ and lines[i][j-1].isupper() and lines[i][j].islower() and lines[i][j+1].isupper()\ and lines[i+1][j-1].isupper()and lines[i+1][j].isupper()and lines[i+1][j+1].isupper()\ and (lines[i-1][j-2].islower()if (j-2)>0 else True) and (lines[i-1][j+2].islower()if (j+2)<=(len(lines[0])-1) else True)\ and (lines[i+1][j-2].islower()if (j-2)>0 else True) and (lines[i+1][j+2].islower()if (j+2)<=(len(lines[0])-1) else True)\ and (lines[i-2][j-1].islower()if (i-2)>0 else True) and (lines[i+2][j-1].islower()if (i+2)<=(len(lines)-1) else True)\ and (lines[i-2][j+1].islower()if (i-2)>0 else True) and (lines[i+2][j+1].islower()if (i+2)<=(len(lines)-1) else True): print lines[i][j]+"(%s,%s,%s)"%(i,j,lines[i]) answer+=lines[i][j] print answer if __name__ == "__main__": if len(sys.argv) != 2: print "Usage: %s <args>" % sys.argv[0] exit(1) url = sys.argv[1] download(url)
改进为只在一维考虑,并且不考虑边界,其实就是...oXXXoXXXo...
# -* - coding: UTF-8 -* - #换行,结尾加"\" #三元操作符 V1 if X else V2 import os,sys,urllib import re def download(url): data=urllib.urlopen(url).read() strBegin = "kAewtloYgcFQaJNhHVGxXDiQmzjfcpYbzxlWrVcqsmUbCunkfxZWDZjUZMiGqhRRiUvGmYmvnJIHEmbT" strEnd = "-->" begin = data.find(strBegin) end = data.find(strEnd) end-=1 content = data[begin:end] #这里实际上需要匹配的是这样的每一行:ooooooooooooooooooooooXXXoXXXooooooooooooooooo这样的 #[A-Z]{3} means exactly 3 capital letters. #The brackets () are used to define groups. For each matching pattern, only the group is returned. i #Putting "".join() around it changes it from a list of letters to a continuous string, just for clarity. print "".join(re.findall(r"[a-z][A-Z]{3}([a-z])[A-Z]{3}[a-z]",content)) if __name__ == "__main__": if len(sys.argv) != 2: print "Usage: %s <args>" % sys.argv[0] exit(1) url = sys.argv[1] download(url)
得到结果。
http://www.pythonchallenge.com/pc/def/linkedlist.php
import urllib,os,sys count = 12345 times = 400 sentence = "and the next nothing is " for i in range(times): url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=%s"%count content = urllib.urlopen(url).read() begin = content.find(sentence) begin+=len(sentence) count = content[begin:] print "%d\t:%s"%(i,url) print content
http://www.pythonchallenge.com/pc/def/peak.html
有点坑爹呀,论坛看了半天,这个我怎么pronounce都不会这么敏感的。
下载部分:
import urllib,sys url = "http://www.pythonchallenge.com/pc/def/banner.p" print url content = urllib.urlopen(url).read() f = open("./banner.p","w") f.write(content) f.close()显示部分:
import pickle f = open("./banner.p") content = f.read() f.close() object = pickle.loads(content) for line in object: pic = "" for tuple in line: char = tuple[0] times = tuple[1] for i in range(times): pic+=char print pic
更简洁的:
import pickle f = open("./banner.p") content = f.read() f.close() object = pickle.loads(content) for line in object: print "".join(map(lambda pair:pair[0]*pair[1],line))
http://www.pythonchallenge.com/pc/def/channel.html
首先:
http://www.pythonchallenge.com/pc/def/zip.html
http://www.pythonchallenge.com/pc/def/channel.zip
import sys,os import zipfile next = "90052" zip = zipfile.ZipFile("./channel.zip") result = "" while True: file = next + ".txt" print " find next file :%s"%file if not os.path.exists(file): print "error: file %s not exists."%file break else : f = open(file) content = f.read() f.close() result += zip.getinfo(file).comment print "file:%s %s"%(file,content) begin = content.find("Next nothing is ") if begin<0: break else: begin+=len("Next nothing is ") next = content[begin:] print resulthttp://www.pythonchallenge.com/pc/def/hockey.html
http://www.pythonchallenge.com/pc/def/oxygen.html
下载文件:
import urllib url = "http://www.pythonchallenge.com/pc/def/oxygen.png" filename = url[url.rfind("/"):] print filename content = urllib.urlopen(url).read() f = open("."+filename,"w") f.write(content) f.close()处理图片:
# -* - coding: UTF-8 -* - import Image im = Image.open("./oxygen.png") width = im.size[0] height = im.size[1] print im.format, im.size, im.mode #for y in range(height): # print "%d:%s"%(y,im.getpixel((0,y))) #所以可以选择 y = 46 list = [] prePixel = (0,0,0) for x in range(width): pixel = im.getpixel((x,46)) #实际上R G B 通道的值是一样的 if pixel != prePixel and pixel[0]==pixel[1]and pixel[1]==pixel[2]: list.append(pixel) prePixel = pixel result = "" for pixel in list: result+=chr(pixel[2]) print result
结论是:smart guy, you made it. the next level is [105, 10, 16, 101, 103, 14, 105, 16, 121]
注意这样是错的,原因是,如果两个都是1,那么只能识别一个!坑爹。还是找到每7个变换一下的规律。
# -* - coding: UTF-8 -* - import Image im = Image.open("./oxygen.png") width = im.size[0] height = im.size[1] print im.format, im.size, im.mode #for y in range(height): # print "%d:%s"%(y,im.getpixel((0,y))) #所以可以选择 y = 46 print ''.join([chr(im.getpixel((i, 43))[0]) for i in xrange(0, 609, 7)])
再做一次:
hint = [105, 110, 116, 101, 103, 114, 105, 116, 121] result = "" for i in hint: result+=chr(i) print result
http://www.pythonchallenge.com/pc/def/integrity.html
import bz2 un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084' pw = 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08' print bz2.decompress(un) print bz2.decompress(pw)
得到关键字:
huge,file
http://www.pythonchallenge.com/pc/return/good.html
import Image,ImageDraw import urllib first = [ 146,399,163,403,170,393,169,391,166,386,170,381,170,371,170,355,169,346,167,335,170,329,170,320,170, 310,171,301,173,290,178,289,182,287,188,286,190,286,192,291,194,296,195,305,194,307,191,312,190,316, 190,321,192,331,193,338,196,341,197,346,199,352,198,360,197,366,197,373,196,380,197,383,196,387,192, 389,191,392,190,396,189,400,194,401,201,402,208,403,213,402,216,401,219,397,219,393,216,390,215,385, 215,379,213,373,213,365,212,360,210,353,210,347,212,338,213,329,214,319,215,311,215,306,216,296,218, 290,221,283,225,282,233,284,238,287,243,290,250,291,255,294,261,293,265,291,271,291,273,289,278,287, 279,285,281,280,284,278,284,276,287,277,289,283,291,286,294,291,296,295,299,300,301,304,304,320,305, 327,306,332,307,341,306,349,303,354,301,364,301,371,297,375,292,384,291,386,302,393,324,391,333,387, 328,375,329,367,329,353,330,341,331,328,336,319,338,310,341,304,341,285,341,278,343,269,344,262,346, 259,346,251,349,259,349,264,349,273,349,280,349,288,349,295,349,298,354,293,356,286,354,279,352,268, 352,257,351,249,350,234,351,211,352,197,354,185,353,171,351,154,348,147,342,137,339,132,330,122,327, 120,314,116,304,117,293,118,284,118,281,122,275,128,265,129,257,131,244,133,239,134,228,136,221,137, 214,138,209,135,201,132,192,130,184,131,175,129,170,131,159,134,157,134,160,130,170,125,176,114,176, 102,173,103,172,108,171,111,163,115,156,116,149,117,142,116,136,115,129,115,124,115,120,115,115,117, 113,120,109,122,102,122,100,121,95,121,89,115,87,110,82,109,84,118,89,123,93,129,100,130,108,132,110, 133,110,136,107,138,105,140,95,138,86,141,79,149,77,155,81,162,90,165,97,167,99,171,109,171,107,161, 111,156,113,170,115,185,118,208,117,223,121,239,128,251,133,259,136,266,139,276,143,290,148,310,151, 332,155,348,156,353,153,366,149,379,147,394,146,399] second = [ 156,141,165,135,169,131,176,130,187,134,191,140,191,146,186,150,179,155,175,157,168,157,163,157,159, 157,158,164,159,175,159,181,157,191,154,197,153,205,153,210,152,212,147,215,146,218,143,220,132,220, 125,217,119,209,116,196,115,185,114,172,114,167,112,161,109,165,107,170,99,171,97,167,89,164,81,162, 77,155,81,148,87,140,96,138,105,141,110,136,111,126,113,129,118,117,128,114,137,115,146,114,155,115, 158,121,157,128,156,134,157,136,156,136] data = urllib.urlopen("http://www.pythonchallenge.com/pc/return/good.jpg").read() f = open("./good.jpg","w") f.write(data) f.close() image = Image.open("./good.jpg") newimage = Image.new(image.mode,image.size) draw = ImageDraw.Draw(newimage) draw.line(first,fill='#fff') draw.line(second,fill='#fff') print draw newimage.save("./newImage.png")
http://www.pythonchallenge.com/pc/return/bull.html
一种称为Look-and-say sequence的特殊数列
import string def say(look): answer = "" s = str(look) base = s[0] count = 0 for i in range(len(s)): if s[i]==base: count+=1 else : answer = answer + str(count) + base count = 1 base = s[i] answer = answer + str(count) + base return answer next = "1" for i in range(31): print "%d:%s:%s\n"%(i+1,next,len(next)) next = say(next)
http://www.pythonchallenge.com/pc/return/5808.html
图像处理模块真心没那么感冒,可以参考博客:http://blog.csdn.net/kosl90/article/details/7270177
http://www.pythonchallenge.com/pc/return/evil.html
实际上不是图片处理。观察发现图片地址是:
http://www.pythonchallenge.com/pc/return/evil1.jpg
对应的还有几张图片,分析图片含义
http://www.pythonchallenge.com/pc/return/evil2.jpg not jpg --.gfx 所以下载http://www.pythonchallenge.com/pc/return/evil2.gfx
http://www.pythonchallenge.com/pc/return/evil3.jpg no more evils
http://www.pythonchallenge.com/pc/return/evil4.jpg 无法显示图像,在ie下可以显示Bert is evil! go back!
所以只需要处理evil2.gfx。具体可以参考:http://blog.csdn.net/kosl90/article/details/7270605
对于需要显示图片的,我都不想去做了,over。
http://www.pythonchallenge.com/pc/return/disproportional.html
根据Bert拨出数字:2378
还有一个链接地址:http://www.pythonchallenge.com/pc/phonebook.php,其中是一个XML文件。
查资料,本题可以使用模块:sudo easy_install xmlrpclib
import xmlrpclib xmlrpc = xmlrpclib.ServerProxy("http://www.pythonchallenge.com/pc/phonebook.php") print xmlrpc.system.listMethods() print xmlrpc.system.methodHelp('phone') print xmlrpc.phone('Bert')得到电话:555-ITALY
http://www.pythonchallenge.com/pc/return/italy.html