Python Challenge通关攻略及代码(第11至15关)

本文详细解读了PythonChallenge第11至15关的通关攻略,涉及图像像素处理、URL解码、XML-RPC调用和日期推理等技巧,挑战者需通过解决一系列逻辑谜题找到隐藏信息并进入下一关。
摘要由CSDN通过智能技术生成

上文介绍了Python Challenge第6至10关的通关攻略及代码,本文继续介绍第11至15关的通关攻略及代码。

第11关:odd even

url:http://www.pythonchallenge.com/pc/return/5808.html
第11关界面

11.1 攻略

本关关卡名为“odd even”,即奇数偶数,界面图片模糊有重影,因此尝试将该图片分离为奇数和偶数像素,分离后的图片中有一个单词“evil”,因此修改url为http://www.pythonchallenge.com/pc/return/evil.html进入下一关。

11.2 代码

from PIL import Image
img = Image.open('cave.jpg')
width, height = img.size
new_img = Image.new('RGB', (width // 2, height // 2))
for i in range(width):
    for j in range(height):
        pixel = img.getpixel((i, j))
        new_img.putpixel((i // 2, j // 2), pixel)
new_img.show()

输出:
第11关输出

第12关:dealing evil

url:http://www.pythonchallenge.com/pc/return/evil.html
第12关界面

12.1 攻略

  1. 查看源代码发现本关界面上的图片为“evil1.jpg”,如下图所示:
    源代码中的图片地址
  2. 猜测可能还有其他图片,尝试修改图片地址中的evil1为evil2、evil3、evil4、evil5……
  1. 由于关卡界面上的牌被分成5堆,尝试将evil2.gfx拆分成5部分,得到5张图片,分别为“dis”、“pro”、“port”、“ional”、“ity ”,因此答案为disproportional,修改url为http://www.pythonchallenge.com/pc/return/disproportional.html进入第13关。

12.2 代码

from PIL import Image
from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True #设置可以加载大图片
import io
import os
with open('evil2.gfx', 'rb') as f:
    data = f.read()
for i in range(5):
    img = Image.open(io.BytesIO(data[i::5]))
    img = img.resize((200, 200)) #调整图片大小便于展示
    img.show()

输出:
第12关答案

第13关:call him

url:http://www.pythonchallenge.com/pc/return/disproportional.html
第13关界面

13.1 攻略

  1. 界面中是一部电话按键,提示“phone that evil”,让给evil打电话,在按键5上发现隐藏链接,点击跳转至http://www.pythonchallenge.com/pc/phonebook.php,如下图所示,该界面显示为xml。
    phonebook.php
  2. 结合关卡名“call him”中“call”同样有“调用”的含义,尝试通过XML-RPC调用带参数方法,使用xmlrpc.client包查看远程服务器的方法发现其中果然有phone方法。上一关中埋下的伏笔evil是Bert,因此调用phone(‘Bert’),得到答案“555-ITALY”,修改url为http://www.pythonchallenge.com/pc/return/italy.html进入第14关。
    phone方法

13.2 代码

import xmlrpc.client
proxy = xmlrpc.client.ServerProxy("http://www.pythonchallenge.com/pc/phonebook.php")
print(proxy.system.listMethods())
print(proxy.phone('Bert'))
# Output:
# ['phone', 'system.listMethods', 'system.methodHelp', 'system.methodSignature', 'system.multicall', 'system.getCapabilities']
# 555-ITALY

第14关:walk around

url:http://www.pythonchallenge.com/pc/return/italy.html
第14关界面

14.1 攻略

  1. 界面中是一个面包卷和一个条纹图片,查看源代码发现提示信息“remember: 100*100 = (100+99+99+98) + (…”,如下图所示,该数组可补全为[(100, 99, 99, 98), (98, 97, 97, 96), … , (2, 1, 1, 0)]。
    第14关源代码隐藏的提示信息
  2. 条纹图片wire.png的大小刚好为10000 : 1,说明需要处理这张图片。结合面包卷一圈一圈绕起来的方式,尝试将该图片按照上述数组卷成100 : 100的新图片。
    wire.png
  3. 图片卷完得到一张小猫的图片,修改url为http://www.pythonchallenge.com/pc/return/cat.html,界面提示猫的名字为uzi,再次修改url为http://www.pythonchallenge.com/pc/return/uzi.html进入第15关。
    猫有名字

14.2 代码

from PIL import Image

img = Image.open('wire.png')
new_img = Image.new('RGB', (100, 100))
direction = [(1, 0), (0, 1), (-1, 0), (0, -1)] # 右,下,左,上
new_x, new_y = -1, 0

array = []
for i in range(100, 0, -2):
    array.extend([i, i - 1, i - 1, i - 2])

x = 0
for i in range(len(array)):
    for j in range(array[i]):
        new_x = new_x + direction[i % 4][0]
        new_y = new_y + direction[i % 4][1]
        new_img.putpixel((new_x, new_y), img.getpixel((x, 0)))
        x += 1
new_img.show()

输出:
第14关输出

第15关:whom?

url:http://www.pythonchallenge.com/pc/return/uzi.html
第15关界面

15.1 攻略

  1. 关卡名为“Whom?”,应该是要猜一个人名。界面中是一个日历,1xx6年的1月26日被圈出来了,并且这天是星期一。查看源代码发现有两个提示:
  • he ain’t the youngest, he is the second 他不是最小的,是第二小的。
  • todo: buy flowers for tomorrow 待办:明天要买花,这说明1xx6年1月27日是一个重要日期,可能是他的生日。

第15关源代码中隐藏的提示

  1. 日历右下角的2月份小日历中有29号,说明1xx6年是闰年。那么根据日期相关提示,尝试枚举出符合要求的1xx6年1月27日的日期,得到1176-01-27、1356-01-27、1576-01-27、1756-01-27、1976-01-27五个日期,查找1月27日出生的名人,发现莫扎特1756-01-27出生,因此答案为mozart,修改url为http://www.pythonchallenge.com/pc/return/mozart.html进入第16关。
    1月27日出生的名人

15.2 代码

import datetime
import calendar
for year in range(1006, 1997):
    if year % 10 == 6 and calendar.isleap(year):
        if datetime.date(year, 1, 27).weekday() == 1:
            print(f"{year}-01-27")
# Output:
# 1176-01-27
# 1356-01-27
# 1576-01-27
# 1756-01-27
# 1976-01-27

以上就是Python Challenge第11-15关攻略啦,第16-19关攻略请见文章Python Challenge通关攻略及代码(第16至19关)~
完整代码及运行结果详见:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fufufunny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值