第6关:
既然下面的与riddle没有关系,那就不要管了啦,想哥什么时候有钱了再汇给你呗。现在还只是工科屌丝一枚。
看上面,除了一个注释<!--zip-->就没了,拉进url一试,yes, find the zip.
压缩文件,再拉一个channel.zip就弄出来了。
剩下的与第5关类似。 the next nothing is ...
import urllib import urllib.request import zipfile import os import os.path import re def un_zip(file_name): document_name = file_name.replace(‘.zip‘, ‘‘) if not os.path.isdir(document_name): os.mkdir(document_name) with zipfile.ZipFile(file_name) as Zip: for name in Zip.namelist(): Zip.extract(name, document_name) # 接收文件 urllib.request.urlretrieve(‘http://www.pythonchallenge.com/pc/def/channel.zip‘, r‘.\channel.zip‘) # 解压文件 un_zip(‘channel.zip‘) # 查找起点文件 with open(‘channel\\readme.txt‘, ‘r‘) as f: nowfile = re.findall(‘\d+‘, f.read())[1] Zip = zipfile.ZipFile(‘channel.zip‘) comments = [] # 查找结束文件 while 1: try: with open(‘channel\\‘+nowfile+‘.txt‘) as f: comments.append(Zip.getinfo(nowfile + ‘.txt‘).comment.decode()) content = f.read() if not re.match(‘Next nothing is ‘, content): print(content, nowfile) nowfile = re.search(‘\d+‘, content).group() except: break print(‘‘.join(comments)) ‘‘‘ Collect the comments. ‘‘‘ ‘‘‘ **************************************************************** **************************************************************** ** ** ** OO OO XX YYYY GG GG EEEEEE NN NN ** ** OO OO XXXXXX YYYYYY GG GG EEEEEE NN NN ** ** OO OO XXX XXX YYY YY GG GG EE NN NN ** ** OOOOOOOO XX XX YY GGG EEEEE NNNN ** ** OOOOOOOO XX XX YY GGG EEEEE NN ** ** OO OO XXX XXX YYY YY GG GG EE NN ** ** OO OO XXXXXX YYYYYY GG GG EEEEEE NN ** ** OO OO XX YYYY GG GG EEEEEE NN ** ** ** **************************************************************** ************************************************************** ‘‘‘
好吧,其实远没有这么简单,这题的技术含量可能是之前所有中最高的了。当然可能我是想写一个一步直接完成的程序。
找到最后一个文件,‘collect the comments‘,这我确实不懂,查了才知道压缩文件每次打开,右边的注释就是这个所指的注释,利用getinfo()获得
接着就是类似前面的图片数字将其组合起来。获得最后一张图。
hockey应该就是最后答案了,但是事实上打开后,
‘it‘s in the air. look at the letters.‘
又不得其解,总是在关键时刻掉链子。最后才发现那些HOCKEY大字母中组成的小写字母才是最终答案 oxygen。
学习函数:
urlretrieve(url, filename): 从给定url获取文件或者直接html接收文件到filename中,其中filename是路径+文件名
ZipFile(name): 打开zip压缩文件,之后用extract解压文件
getinfo(name): name为压缩文件中的相应文件,获取相应的注释
‘‘.join(list): 发现python challenge中经常使用到,用来连接字符串
第7关卡壳啦。
时间: 2024-10-18 12:08:53