python challenge 攻略(未完待续)

0.http://www.pythonchallenge.com/pc/def/0.html

很简单,求2^38

1 __author__ = 'lonnelan'
2 
3 print 2**38
View Code

得到答案274877906944

输入地址栏:http://www.pythonchallenge.com/pc/def/274877906944.html

 

1.http://www.pythonchallenge.com/pc/def/274877906944.html

明显是个解密,映射就是k->m,差两个字符

 1 __author__ = 'lonnelan'
 2 
 3 import sys
 4 
 5 str = "cdefghijklmnopqrstuvwxyzab"
 6 input = """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."""
 7 
 8 for i in input:
 9     if 'a' <= i and i <= 'z':
10         sys.stdout.write(str[ord(i)-97])
11     else:
12         sys.stdout.write(i)
View Code

 

解密那句话之后就说下一关的地址就是URL的解析,把input改成map,解析为ocr

输入地址栏:http://www.pythonchallenge.com/pc/def/ocr.html

 

2.http://www.pythonchallenge.com/pc/def/ocr.html

题目说让看源代码,打开源代码

<!--
find rare characters in the mess below:
-->

<!--
.................
-->

里面有一句,在下面的大量数据中找到少数的几个字符。妥了,直接码之。

复制粘贴不是coder的作风,先用正则找到两个<!-- -->中的东西,这里要注意用re.findall时候flag的参数,re.S表示可以找多行,我就是在这里纠结了好久,最后查的API

然后从第二个大堆东西中再用正则找出字母即可。

 1 __author__ = 'lonnelan'
 2 
 3 import urllib,re,sys
 4 
 5 url = "http://www.pythonchallenge.com/pc/def/ocr.html"
 6 web = urllib.urlopen(url)
 7 source = web.read()
 8 web.close()
 9 
10 temp = re.findall(r"<!--(.+?)-->", source, re.S)[1]
11 res = re.findall(r"[a-zA-Z]", temp)
12 for i in res:
13     sys.stdout.write(i)
View Code

得到答案equality输入地址栏:http://www.pythonchallenge.com/pc/def/equality.html

 

3.http://www.pythonchallenge.com/pc/def/equality.html

题目说,在一个小写字母两侧要严格的有3个大写字母。但是文章也没给,直接看页面源代码。发现跟上题差不多,码之。

 1 __author__ = 'lonnelan'
 2 
 3 import re,urllib,sys
 4 
 5 url = "http://www.pythonchallenge.com/pc/def/equality.html"
 6 web = urllib.urlopen(url)
 7 source = web.read()
 8 web.close()
 9 
10 tmp = re.findall(r"<!--(.+?)-->", source, re.S)[0]
11 res = re.findall(r"[^A-Z][A-Z]{3}[a-z][A-Z]{3}[^A-Z]", tmp, re.S)
12 for i in res:
13     sys.stdout.write(i[4])
View Code

得到答案linkedlist,输入地址栏:http://www.pythonchallenge.com/pc/def/linkedlist.html

 

4.http://www.pythonchallenge.com/pc/def/linkedlist.html

要求跳转到http://www.pythonchallenge.com/pc/def/linkedlist.php

点击图片跳转到http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345

提示是and the next nothing is 44827

也就是说下一跳网址是http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=44827

再次打开还是跳转,明显要走到最后嘛,码之。不过由于网速问题,可能打开的速度略慢。

 1 __author__ = 'lonnelan'
 2 
 3 import urllib,re
 4 
 5 url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing="
 6 next = "12345"
 7 while True:
 8     web = urllib.urlopen(url + next)
 9     source = web.read()
10     web.close()
11     next = re.findall(r"[0-9]+", source)[0]
12     print source, next
View Code

有时候会报错,这时候你需要手动进入网页看看内容是什么,可能是除2什么的,也有可能是最后地址

跳到最后网址时,页面就一串字母peak.html

输入地址栏:http://www.pythonchallenge.com/pc/def/peak.html

 

5.http://www.pythonchallenge.com/pc/def/peak.html

原始页面什么都没有,看源代码。peak hill的发音明显就是pickel。直接下载了banner.p,解了就行了

 1 __author__ = 'lonnelan'
 2 
 3 
 4 import pickle, sys
 5 
 6 pkl_file = open('D:\\banner.p', 'rb')
 7 
 8 
 9 data = pickle.load(pkl_file)
10 for i in data:
11     #print i
12     for j in i:
13         for flag in range(0, j[1], 1):
14             sys.stdout.write(j[0])
15     print
View Code

一串符号组成的channel,下一跳地址就是http://www.pythonchallenge.com/pc/def/channel.html

posted @ 2014-11-21 15:02  很水的货  阅读(1147)  评论(0编辑  收藏  举报