Python challenge通关代码及攻略(9-16)

来源:互联网 发布:教师网络培训总结 编辑:程序博客网 时间:2024/05/16 12:40

第九题

这里写图片描述

题目分析

图片上和上一题一样。有奇怪的黑点点。此题应该考察的与上题相同也是图像解析类的。

查看源码。

这里写图片描述

页面上可以下载good.jpg。然后提示first+second=?
然后first和second各对应一系列的数字。那么应该是两个数字加起来,代表一个像素点。

如果我们在原图片上涂黑点,那么看不出什么变化。于是我们新建一个白底图片,再这个上面涂黑点。

考察知识点

Python-Image 基本的图像处理操作(赞)
http://www.aichengxu.com/view/39904

Python图形图像处理库的介绍之Image模块
http://onlypython.group.iteye.com/group/wiki/1372-python-graphics-image-processing-library-introduced-the-image-module

Python Imaging Library (PIL)下载
http://www.pythonware.com/products/pil/

代码及结果

import re, Image  file = open('d:/Python/good.html')  message = re.findall('(<!--[^-]+-->)', file.read(), re.S)[1]  file.close()  first = re.findall('(/d+)',re.findall('first:(.+)second',message,re.S)[0],re.S)  second = re.findall('(/d+)',re.findall('second:(.+)>',message,re.S)[0],re.S)  all = first + second  im = Image.open('d:/Python/good.jpg')  im2 = Image.new(im.mode, im.size)  for x in range(0,len(all),2):      im2.putpixel((int(all[x]),int(all[x+1])),(255,255,255,255))  im2.show()  

这里写图片描述

显示一只牛,那么就是bull

输入http://www.pythonchallenge.com/pc/return/bull.html,即通关

第十题

这里写图片描述

题目分析

光看网页上显示的 len(a[30])=? 是让我们计算a数组下标为30的元素的长度

不过按照惯例。查看源码

这里写图片描述

老实说,这一串,并没有什么规律。而且按照 len(a[30])=? 这个提示,应该是会给一个数组让我们算。
这里写图片描述

此时发现href=”sequence.txt”很可疑,点击后
这里写图片描述

那么就是要让我们推算这个数组的 len(a[30])=多少

没看出规律。。百度后得知

11— 表示前一个数“1”是 1 个 1;
21— 表示前一个数“11”是 由 2 个 1 组成;
1211— 表示前一个数“21”是 由 1 个 2、1 个 1 组成;
111221— 即 11 12 21 ,表示前一个数“1211”是依次由 1 个 1,1 个 2,
2 个 1组成;

即每个数字描述前面一个数字的组成

考察知识点

找规律。

  1. Python中的除法
    http://blog.csdn.net/sicofield/article/details/8613877

    地板除(取整除):从Python2.2开始,增加了一个操作符 // ,以执行地板除://除法不管操作数为何种数值类型,总是会舍去小数部分,返回数字序列中比真正的商小的最接近的数字。

代码及结果

strings = ['1','11']  #计算1-30的元素for i in range(1,31):        #计数器重置        j = 0          temp = ''          #当计数器j小于当前元素的长度时(即当前元素的长度还未计算完毕时)        while j < len(strings[i]):                  count = 1                #当计数器j小于前一个元素的长度时且strings[i][j]==strings[i][j+1]                while j<(len(strings[i])-1) and (strings[i][j]==strings[i][j+1]):                          j = j + 1                          count = count + 1                  temp = '%s%d%c' % (temp,count,strings[i][j])                  j = j + 1          strings.append(temp)  print (len(strings[30]))

这里写图片描述

结果是:5808

输入:http://www.pythonchallenge.com/pc/return/5808.html,通关

第十一题

这里写图片描述

题目分析

这个像马赛克一样的图片是什么鬼。。估计跟图片处理有关。

查看源代码。

这里写图片描述

点击

考察知识点

图片分析相关(跟第八题,第九题差不多)

很有可能是与图像坐标的奇偶有关,如果我们按照原图片的规格新建一个图片,而在该图片上只在坐标的奇值或者偶值上涂原图片上的点,发现全是黑乎乎的一片;所以我们再次尝试以原片大小的一半来处理

Python-Image 基本的图像处理操作(赞)
http://www.aichengxu.com/view/39904

Python图形图像处理库的介绍之Image模块
http://onlypython.group.iteye.com/group/wiki/1372-python-graphics-image-processing-library-introduced-the-image-module

Python Imaging Library (PIL)下载
http://www.pythonware.com/products/pil/

代码及结果

图片分析,我一向不太擅长。。这是百度的别人的源码。

原作者:
http://blog.csdn.net/billstone/article/details/4546725

import Image  im = Image.open("cave.jpg")  odd = Image.new(im.mode, (im.size[0]/2, im.size[1]/2))  even = Image.new(im.mode, (im.size[0]/2, im.size[1]/2))  for x in range(1,im.size[0],2):      for y in range(1,im.size[1],2):          odd.putpixel(((x-1)/2,(y-1)/2),im.getpixel((x,y)))  for x in range(1,im.size[0],2):      for y in range(1,im.size[1],2):          even.putpixel((x/2,y/2),im.getpixel((x,y)))  odd.save('odd.jpg')  even.save('even.jpg')  

运行代码,查看odd.jpg和even.jpg,发现两张图几乎是一样的,通过反色处理,我们在右上角发现evil的字样

输入http://www.pythonchallenge.com/pc/return/evil.html,即通关

第十二题

这里写图片描述

题目分析

页面没有文字信息,看图片,好像是要分牌。

查看源码

这里写图片描述

src=”evil1.jpg”只有这个看起来奇怪点,点击,还是显示发牌图片
这里写图片描述

考虑到图片显示的是发牌,将地址改为evil2.jpg
http://www.pythonchallenge.com/pc/return/evil2.jpg
这里写图片描述

提示上说:不是jpg,是gfx。那么就将后缀名改为gfx,这样就可以得到一个二进制文件。下载到电脑里
这里写图片描述

继续测试evil3.jpg
这里写图片描述

试试evil4.jpg

没反应了。。看来最关键的就是evil2.jpg

然后以发牌的方式将文件中的数据分发到五个新文件中,分发方式如下:evil.gfx的第一个字节给第一个文件,第二个字节给第二个文件,第三个字节给第三个文件,第四个字节给第四个文件,第五个字节给第五个文件,第六个字节给第一个文件,第七个字节给第二个文件……

考察知识点

范围解析操作符(::)
http://blog.csdn.net/chamtianjiao/article/details/6406751

代码及结果

在notepad++中,编辑exc12.py

#读取文件里的信息f = open('evil2.gfx','rb')  content = f.read()  f.close()  #新建一个图片,将文件中的字符开始平均分发for i in range(5):      f = open('%d.jpg' % i, 'wb')      f.write(content[i::5])      f.close() print("done!please check your file")

这里写图片描述

文件夹里有新文件,

这里写图片描述

点开看按照次序。分别是dis ,pro ,port,ional,最后一个被划掉了,不管它

组合英文单词就是disproportional。

因此,输入http://www.pythonchallenge.com/pc/return/disproportional.html,即通关

第十三题

这里写图片描述

题目分析

看图文字提示是打电话给恶魔?

查看源码

这里写图片描述

此时发现
area shape=”circle” coords=”326,177,45” href=”../phonebook.php”很可疑。

Phonebook就是电话簿,既然要打电话给恶魔,肯定要在电话簿里找到恶魔的电话号码~

点击phonebook.php

这里写图片描述

应该是跟xml有关。

百度后得知,是考察xmlrpclib模块

考察知识点

  1. python使用xmlrpc实例讲解
    http://www.jb51.net/article/44515.htm

代码及结果

首先,导入xmlrpclib,然后连接phonebook.php,接着使用listMethods方法查看了一下可使用的方法,发现有一个叫phone方法,再然后使用methodHelp方法查看了一下phone方法的帮助,于是乎这题就解出来了。
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')  

最后会得到Bert的电话--555-ITALY

输入http://www.pythonchallenge.com/pc/return/italy.html,即通关

第十四题

这里写图片描述

题目分析

显示的是一圈面包,下面还有个图片挡住了什么东西?

查看源码

这里写图片描述

这个源码貌似提示的地方很多~

walk around:绕着走

– remember: 100*100 = (100+99+99+98) + (… :叫我们记住这行算式

两个图片。点击”italy.jpg,还是那个丑面包,没什么好注意的

点击wire.png,

这里写图片描述

感觉没啥头绪。。不过肯定是跟图片处理有关的

考察知识点

Image模块

代码及结果

这题没做出来,放个做出来的人的链接

http://blog.csdn.net/kosl90/article/details/7341181

l = [[i, i - 1 , i - 1, i - 2] for i in xrange(100, 1, -2)]  l = reduce(lambda x, y: x+y, l)  # print l, len(l)  import Image  org = Image.open('level14.d/wire.png')  org_data = list(org.getdata())  res = Image.new(org.mode, (100, 100))  res_data = res.load()  # (0,0)  #    ---->x  #    |  #    vy  dire = [(1, 0),  # > (x+1, y) right          (0, 1),  # v (x, y+1) down          (-1, 0),  # < (x-1, y) left          (0, -1),  # ^ (x, y-1) up          ]  # init  v = 0  org_index = 0  res_pos = (-1, 0)  for times in l:      for i in xrange(times):          # pos will out of index if reset position after setting color          res_pos = tuple(map(lambda x, y: x + y, res_pos, dire[v]))  # (res_pos[0] + dire[v][0], res_pos[1] + dire[v][1])          # f = open('level14.d/log.log','a')          # print >> f, pos          # f.close()          res_data[res_pos] = org_data[org_index]          org_index += 1      v = (v + 1) % 4  # j + 1 if j != 4 else 0  res.save('level14.d/res.png')  

最后得到了一只猫的图像,猫叫uzi

输入http://www.pythonchallenge.com/pc/return/uzi.html,即通关

第十五题

这里写图片描述

题目分析

日历上把26号圈住了,肯定有特别的含义

查看源码

这里写图片描述

让我们猜这个人是谁。

说he ain’t the youngest, he is the second。他是第二年轻的(在家里排名,不然跟谁比咧?)

buy flowers for tomorrow:也就是说27号,可能是葬礼或生日,需要为这天买花

恩。。好像这题不用python百度一下,或者熟悉欧洲名人事迹的人也能轻松猜出来

那这题考察的意图到底是什么呢?

仔细思考,我们只知道一个27号,只知道年龄,如果我们是对欧洲历史不太了解的(比如说是我),那么我们就需要缩小范围,毕竟现在已经是2016年了,不知道他到底是在哪一年出生的。

怎么缩小范围呢?从日历上来看的话,27号是星期二,这个可以用来缩小范围,那么还有没有别的条件呢?

图片右下角。。很模糊的图片中,数格子,可以发现2月只有29天,所以是闰年。

需要我们求出闰年时,1月27号是星期二的日期。然后再百度查那个人的信息是家中的次子就行了~

日期的处理,选择python的calendar和datetime模块

考察知识点

  1. Python时间模块datetime、time、calendar的使用方法
    http://www.jb51.net/article/77971.htm

  2. datetime模块
    python的datetime模块功能详解

代码及结果

在nodepad++中,编辑exc15.py

from calendar import isleap  from datetime import date  TUESDAY = 1  #从1800年到2000年for year in range(1800,2000):    t = date(year, 1, 27)      #是闰年并且1月的27号是星期一    if isleap(year) and t.weekday() == TUESDAY:          print (t.isoformat())  

这里写图片描述

百度这些日期~

很显然是mozat

输入http://www.pythonchallenge.com/pc/return/mozart.html,即通关

第十六题

这里写图片描述

题目分析

肯定又是图片处理,查看源码

这里写图片描述

注意这句话let me get this straight

以粉色的点为基准,将其他像素点排成直线,应该就能出结果

考察知识点

image模块

代码及结果

import Imageim = Image.open("mozart.gif")for y in range(im.size[1]):    #获得像素点    line=[im.getpixel((x, y)) for x in range(im.size[0])]    idx=line.index(195)    line=line[idx:]+line[:idx]    #重新排列像素点    [im.putpixel((x, y),line[x]) for x in range(len(line))]im.show()

结果:

这里写图片描述

输入http://www.pythonchallenge.com/pc/return/romance.html,即通关

1 0
原创粉丝点击