Python Challenge 0~6 记录

python入门水平,感觉此游戏很好玩,记录一下~

Level 0
想当然的先把地址改为238.html,提示38在2的上面,所以应该是2的38次幂。
在python中计算“2**38”,得到274877906944L,答案就在里面了。

Level 1
观察图片,三个字母都是后移两位。
所以,下面的乱码只要后移两位,应该就能得到有意义的句子。
附上渣渣的代码:

p = "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."
q = ''
for ch in p:
    if ch.isalpha():
        x = ord(ch) + 2
        if x == 123:
            ch = 'a'
        else:
            if x == 124:
                ch = 'b'
            else:
                ch = chr(x)
    q = q + ch
print q

得到建议:using string.maketrans() is recommended。
至于结果就不说啦。

Level 2
在源代码里找到提示:

find rare characters in the mess below:
一堆乱码

手动保存到本地(text.txt)进行处理。代码如下(还是渣渣,后面就不注明了):

f = open('text.txt')
a = ''
for line in f:
    for ch in line:
        if ch.isalpha():
            a = a + ch
print a

Level 3
同样在源代码中找到一堆乱码。处理思路和上面一样。

f = open('bodyguard.txt')
pw = ''
for line in f:
    for n in range(0,len(line)-9):
        if line[n].islower():
            if line[n+1:n+4].isupper() and line[n+5:n+8].isupper():
                if line[n+4].islower() and line[n+8].islower():
                    pw = pw + line[n+4]
print pw

Level 4
查看源代码,看到一个相似的链接,后缀多了nothing=12345。修改url,新的页面的内容是and the next nothing is 44827。看来这就是follow the chain的意思了。
这次使用urllib2读取网页内容。

import urllib2
linked = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
num = '12345'
for n in range(1,401):
    response = urllib2.urlopen(linked+num)
    num = ''
    nxt = response.read()
    for ch in nxt:
        if ch.isdigit():
            num += ch
    print nxt

然后关注打印的网页内容信息,跟着走就好了。

Level 5
在源代码中找到提示: peak hell sounds familiar ? 以及peak hell的src“banner.p”。
猜测是要对banner.p进行处理。然而词汇量拦住了我,只好Google一下,看了某个博客前半部分提示。关键词是pickle。继续Google一下pickle库怎么使用。
看半天没懂pickle是用来干嘛的,只好直接试着处理banner.p了。

import pickle,urllib2
f = urllib2.urlopen("http://www.pythonchallenge.com/pc/def/banner.p")
banner = pickle.load(f)
for line in banner:
    print line

这里会得到长得像以下的输出:
[(' ', 95)]
[(' ', 14), ('#', 5), (' ', 70), ('#', 5), (' ', 1)]

到这里又不懂了。去Google,发现答案是一堆符号排列好组成的字母。于是知道了,这些tuple的意思是需要打印的字符和数量。改了一下代码。

import pickle,urllib2
f = urllib2.urlopen("http://www.pythonchallenge.com/pc/def/banner.p")
banner = pickle.load(f)
for line in banner:
    ch = ''
    for tup in line:
        ch += tup[0]*tup[1]
    print ch

Level 6
这次在源代码里找到的提示只有zip。压缩文件的后缀名。
把后缀html改成zip,下载下来一个压缩包。
打开发现是一堆数字命名的txt和readme。很明显思路和Level 4是一样的。
处理完后,找到最后一个txt,让找comments。这下以我匮乏的知识又不知从何找起,去Google一下,发现要用zipfile,info里有comment属性。将所有的comment连起来打印输出。

import zipfile
z = zipfile.ZipFile('channel.zip', 'r')

num = '90052'
di = 'channel/'
t = '.txt'
pw = ''
for n in range(1,909):
    f = open(di+num+t)
    for line in f:
        num = ''
        for ch in line:
            if ch.isdigit():
                num += ch
        #print line
    pw += z.getinfo(num+t).comment

print pw

得到一个HOCKEY的图像,修改url,得到提示:it’s in the air. look at the letters.
看向组成HOCKEY的小字母,是oxygen。的确是in the air呢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值