Tagged: Python Challenge

0

Python Challenge Level 6

感觉变态程度越来越高了…… 入口地址:http://www.pythonchallenge.com/pc/def/channel.html 进去之后,一支巨大的拉链映入眼帘。根据以往经验,查看源代码。分析了一下,只有一个内容有用: <!– <– zip –> 根据那个拉链,再根据这个zip,看起来这道题跟zip关系十分之大。关键问题是怎么利用zip呢?百思不得其解。后来经过若干尝试,终于发现了原来隐藏的内容在channel.zip中。下载了这个文件,发现了一堆文件,里面又是指向下一个文件名的编号。和前几次中urllib的那回有异曲同工之处。打开readme文件: welco­me to my zipped list. hint1: sta­rt from 90052 hint2: answer is insi­de the zip 给了初始值,也给了暗示,答案在zip文件中。。按照当时写urllib的样子,写了这个循环的程序。 这里用到了python中的zip处理模块:zipfile。调用一个zip文件,可以通过zipfile.ZipFile()来打开;然后可以使用namelist()取得到所有zip文件中的文件名。infolist()可以得到关于zip的一些信息,另外通过read/write函数,可以读取、写入zip文件中的内容。 impo­rt re impo­rt zipfi­le value,n = 90052,1 print “ini­tial…

0

Python Challenge Level 5

r颇为变态的一道题。。 程序入口:http://www.pythonchallenge.com/pc/def/peak.html 文中强调:pronounce it… 把它发音读出来。通过观察源代码,发现它大量提到了 Peak hell 这个词。原来并没有接触过pickle,所以在这里费了半天劲,后来还是通过观察banner.p这个文件,发现很多存储的内容,很像序列化的东西。通过搜索后才确定是这个模块。 pickle是一个python的标准模块,几乎可以将任何一个Python对象作为字符串存储。在编程的时候我们经常管它叫做Serialization,也就是序列化。但Python里面将其称之为封装(pickle)。 例如,我们可以通过如下一段代码将一个tuple存入硬盘中: impo­rt cPi­ckle as picklex=(1,2,3,4,5)f=open(‘c:\\1.txt’,‘w’)pickle.dump(x,f)f.close() 而1.txt中是如下形式的一段内容: (I1I2I3I4I5tp1. 我们没有必要理解这段文档具体的存储方式,只是知道pickle可以存储内容就好了。接下来对banner.p解包。发现结果是一个list。 然后可以求出这个list的长度是23,而且list里面还嵌套list。拍拍脑袋想想这到底是做什么用的,想不出来……又仔细观察了一下,发现这个list的深度没有超过2,看起来像个矩阵。所以想到是不是图形? 后来实验了一下,成功了,呵呵。 附上源代码: from urllib2 impo­rt urlo­penimpo­rt cPi­ckle as picklef=urlopen(‘http://www.pythonchallenge.com/pc/def/banner.p’)result=pickle.Unpickler(f).load()print len(result) buf = ”for line in resu­lt:   …

Python Challenge Level 4 0

Python Challenge Level 4

Entry: http://www.pythonchallenge.com/pc/def/linkedlist.php 此题开始变态起来了,用到了linkedlist.php.… 思路: 点击中间的大图片,发现给了一个参数nothing,现在是12345。并告之下一个数是92512。把nothing的值替换为92512,则得到了下一个值为64505。周而复始。 这道题就是要我们用Python实现递推地找到下一个数的值,直到最后出现答案。手工做就会疯掉的。。。 需要使用Python的u­r­lli­b库了。。 还有一个问题就是如何去匹配得到的内容中的数字。观察发现每一页的内容是这样的: and the next nothing is xxxxx 也就是说是一个以数字结尾的正则表达式。我们可以用$符号匹配结尾,用\d匹配数字,用+匹配至少一个字符。这样pattern就是:(\d+)$ 另外到后来很变态。。网页中间突然断掉了,然后给出让把得到的结果除以二继续。。 加起来以后执行了208次,崩溃啊~这要是手动查找…… 源代码: from urllib impo­rt urlo­pen impo­rt re   next=‘12345’ next=‘46059’ #the 198th times   for n in…

Python Challenge Level 3 1

Python Challenge Level 3

Entry: http://www.pythonchallenge.com/pc/def/equality.html Requi­re­ment: One sma­ll letter, sur­roun­ded by EXACTLY three big body­gua­r­ds on each of its sides. 思路: 要求是找出加在三个大写字母中间的一个小写字母。这个小写字母左右两个方向都有三个大写字母。一看就知道应该用正则表达式解决,那么这个正则表达式怎么写呢? 有且仅有一个小写字母:[a-z] 有且仅有三个大写字母:[A-Z]{3} 那么这个­Re­gu­lar Expression的Pattern就是:[A-Z]{3}[a-z][A-Z]{3} ……………… 不对。。在此我犯了一个小错误。上述表达式不能考虑到这种情况:ABCDaABCD。即三个大写字母再外侧是什么,也需要考虑进去。它们不应该是大写字母了。 所以还应该加上非大写字母的Pattern:[^A-Z] So.… Pattern: [^A-Z][A-Z]{3}[a-z][A-Z]{3}[^A-Z] 源代码: con­tent=”’.…..”’   impo­rt re…

Python Challenge Level 2 0

Python Challenge Level 2

http://www.pythonchallenge.com/pc/def/ocr.html 查看页面源代码后,发现了一堆乱码。。有一句话很重要:find rare cha­ra­cters in the mess below。题目是要我们在这堆乱码中找出仅有的几个字符。。 string模块里有个isalpha函数,来确定一个字符是否是字母。这次派上用场了。 源代码: con­tent=”’.…..”’   impo­rt string result=[c for c in con­tent if c.isalpha()] print string.join(result,”)con­tent=”’.…..”’ impo­rt string result=[c for c in con­tent if c.isalpha()] print string.join(result,”)…

初学者的差距 [Python Challenge Level 1] 0

初学者的差距 [Python Challenge Level 1]

学习Python的时候,挑战Python Cha­llen­ge。http://www.pythonchallenge.com/pc/def/map.html 我的源代码是这样的: content=”’g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amkn­sr­cpq ypc dmp. bmg­le gr gl zw fylb gq glcdd­ga­g­clr ylb rfyr’q ufw rfgq rcvr gq qm jmle. sqg­le qrpgle.kyicrpylq() gq…