由于是自己看视频学python,总觉得不写几行代码就什么都没有学到。

找了一个写代码的网站其实只是因为这个看起来好玩。

闯关地址http://www.pythonchallenge.com/index.php

0x00

好吧,先来到第0关

python最好用的地方,计算器

2**38算出来答案,在url上修改即可进入下一关

0x01

进入第一关

看到提示,想到要根据图片中的提示得到转换方法,解密提示,显然不只有三种方法,而是每一个字符都右移两位,我还没有学到映射,就用了暴力转换(先全部变成大写)。

 a = "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."
a=a.upper()
for i in range(26):
a=a.replace(chr(65+i),chr(97+(i+2)%26))
print(a)

一开始不知道字符串内的方法是生成一个备份,调了半天,(((φ(◎ロ◎;)φ)))

map()真香,重构了一下代码,舒服多了

 a="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."
def func(ch):
if ord(ch)>=97 and ord(ch)<=122:
return chr(97+(ord(ch)-97+2)%26)
else:
return ch
b="".join(list(map(func,a)))
print(b)

解密得到"i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url."

将上述规则应用于map,得到ocr,即可进入下一关

0x02

根据说明,找到源码

<!--
find rare characters in the mess below:
-->

随便试了一下,发现出现次数最少的是一次,还是字母,就想到如果把所有的出现次数为一次的字母都按顺序找到,就可以得到答案了。

filter()真香

 b="".join(list(filter(lambda ch : a.count(ch)==1,a)))
print(b)

0x03

One small letter, surrounded by EXACTLY three big bodyguards on each of its sides.

要找的是被恰好三个大写字母夹着的小写字母

我想到了遍历

 l=len(a)
def func(x):
if x >= 4 and x <= l - 5:
if 97 <= ord(a[x]) <= 122:
flg=True
for i in range(3):
if not (65 <= ord(a[x - i - 1]) <= 90 and 65 <= ord(a[x + i + 1]) <= 90):
flg=False
if flg:
return 97<=ord(a[x-4])<=122 and 97<=ord(a[x+4])<=122
b = list(filter(func, range(l)))
c=[]
for i in b:
c.append(a[i])
print("".join(c))

读完题解,啊,我居然忘了isupper(),题解NB

 lst=[""]*9
ans=''
for i in a:
del lst[0]
lst.append(i)
if lst[0].islower()\
and lst[1].isupper()\
and lst[2].isupper()\
and lst[3].isupper()\
and lst[4].islower()\
and lst[5].isupper()\
and lst[6].isupper()\
and lst[7].isupper()\
and lst[8].islower()\
:
ans += lst[4]
print(ans)

一开始看到linkedlist.php我是懵逼的,觉得这个很想正确答案,却进不了下一关,卡了很久,把html改成php就可以过了,(((φ(◎ロ◎;)φ)))、

0x04

点进图片之后看到了and the next nothing is 44827

就知道将url最后的数字改为44827,之后是45439,结果得到提示Your hands are getting tired and the next nothing is 94485

根据题目为链表就知道需要把根据提示不断修改url,从而得到key

首先读取内容,之后修改url,并一直重复,读取内容一开始想着可不可以每次截取最后的5位,后来发现可能存在不是5位的数字,想到了正则表达式,每次匹配字符串末尾的数字,虽然实现了,但是需要人工控制程序停止,看到题解可以每次匹配and the next nothing is这个字符串,用到了re中的search,这确实是之前不曾注意到的。不知不觉,就把代码改成了题解的样子qwq

from urllib import request
import re
url = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
num = ''
mdl = re.compile(r'and the next nothing is (\d*)').search
while True:
with request.urlopen(url+num) as f:
x = str(f.read(),encoding = 'utf-8')
print(x)
match = mdl(x)
if match:
num = match.group(1)
else:
if x == 'Yes. Divide by two and keep going.':
num = str(int(num)/2)
else:
break

 0x05

图片下方有提示,pronounce it(是不是读着像pickle

在网页源代码中可以找到一个banner.p文件,将它反序列化得到一个列表,再将列表中的元素按行打印,即可得到结果(我的脑洞还是不够大啊啊啊啊啊啊

import pickle
with open('banner.p','rb') as f:
data = pickle.load(f)
for i in data:
for j in i:
for k in range(j[1]):
print(j[0],end='')
print('\n')

THEPYTHONCHALLENG闯关记录的更多相关文章

  1. the python challenge闯关记录(9-16)

    9 第九关 是一张图,上面有很多的黑点,查看网页源代码发现了上一关的提示: 还发现了一大串的数字 感觉又是一个使用PIL库进行图像处理的题,百度后知道要将这些点连接起来并重新画图.但是不能在原始图上修 ...

  2. the python challenge闯关记录(0-8)

    0 第零关 2**38 = 274877906944 下一关的url:http://www.pythonchallenge.com/pc/def/274877906944.html 1 第一关 移位计 ...

  3. XSS Challenges闯关笔记

    前言 做xss做疯了再来一个. 地址:https://xss-quiz.int21h.jp/ ,这个貌似是日本的一个安全研究员yamagata21做的. 做到第九关就跪了,而总共有二十关.一半都还没有 ...

  4. python 闯关之路四(下)(并发编程与数据库编程) 并发编程重点

    python 闯关之路四(下)(并发编程与数据库编程)   并发编程重点: 1 2 3 4 5 6 7 并发编程:线程.进程.队列.IO多路模型   操作系统工作原理介绍.线程.进程演化史.特点.区别 ...

  5. C#设计模式开启闯关之路

    前言背景 这是一条望不到尽头的编程之路,自踏入编程之路开始.就面临着各式各样的挑战,而我们也需要不断的挑战自己.不断学习充实自己.打好坚实的基础.以使我们可以走的更远.刚踏入编程的时候.根据需求编程, ...

  6. Kinect+unity 实现体感格斗闯关小游戏

    文章目录 项目地址 1 项目概况 1.1 项目简介 1.2 项目目的 1.3 主要技术 2 设计 2.1 基本概念 2.2 框架 2.3 算法 2.4 模型 2.5 调查问卷 3 实现 3.1 技术难 ...

  7. 网页闯关游戏(riddle webgame)--H5刮刮卡的原理和实践

    前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. 对于刮刮卡, 想必大家都很熟悉, 也很喜 ...

  8. 网页闯关游戏(riddle webgame)--SQL注入的潘多拉魔盒

    前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. web开发初学者往往会忽视一些常见的漏洞 ...

  9. 网页闯关游戏(riddle webgame)--仿微信聊天的前端页面设计和难点

    前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. 本文讲描述, 如何在网页端实现一个仿微信 ...

随机推荐

  1. React-理解高阶组件

    高阶组件:定义一个函数,传入一个组件,返回另外一个组件,另外一个组件包裹了传入的组件. 分类:属性代理高阶组件,反向继承高阶组件. 作用:代码复用,渲染节时. 高阶函数例子: function hel ...

  2. Git 使用vi或vim命令打开、关闭、保存文件

    1 vi & vim 有两种工作模式: (1)命令模式:接受.执行 vi & vim 操作命令的模式,打开文件后的默认模式: (2)编辑模式:对打开的文件内容进行 增.删.改 操作模式 ...

  3. Linux系统多网卡环境下的路由配置

    Linux下路由配置命令 1. 添加主机路由 route add -host 192.168.1.11 dev eth0 route add -host 192.168.1.12 gw 192.168 ...

  4. 分享一个公众号h5裂变吸粉源码工具

    这次我是分享我本人制作的一个恶搞程序,说白了就是一个公众号裂变吸粉工具,市面上有很多引流方法,例如最常见的就是色流,哈哈,今天我跟大家分享的方法是有趣的,好玩的,恶搞的.这个程序上线一天已经收获了61 ...

  5. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  6. CF892/problem/C

    题目传送门: [http://codeforces.com/contest/892/problem/C] 题意: 给你一个长度为n的数组,相邻两个元素的GCD(最大公约数)可以取代二者的任意一个,问你 ...

  7. iOS悬浮窗口(无论界面跳转、View始终在视图上显示,可移动)

    2016.09.24 23:52* 字数 71 阅读 5925评论 9喜欢 11 让所有界面都显示,最好还是封装一个继承Window的类:JYCWindow. 先看看效果:   mygif.gif 关 ...

  8. openstack-KVM-vCPU

    一.KVM基础功能 (1)支持 硬件支持 VT-x VT-d 系统支持 kernel > 3.5 (2)计算机系统的子系统 CPU 处理器 Memory 内存 Storage 存储 Networ ...

  9. jmeter压测

    一般压测时间:10-15分钟   这些并发用户一直在请求. 稳定性测试:一周  2天 衡量性能好坏的指标: tps 服务端每秒钟能处理的请求数 rt响应时间 就是你从发出请求到服务器端返回所需的时间. ...

  10. nodejs 中的一些方法

    fs.unlink(path, [callback(err)]) //删除文件操作. //path 文件路径 //callback 回调,传递一个异常参数err. ndoe中解决跨域问题 expres ...