The Python Challenge 谜题全解(持续更新)
Python Challenge(0-2)
The Python Challengehttp://www.pythonchallenge.com/
是个很有意思的网站,可以磨练使用python的技巧,每一关都有挑战,要编写相应的代码算出关键词,才可以获取下一关的url,还是很好玩的QAQ
LEVEL 0
显然是计算图片中的\(2^{38}\),结果为274877906944,所以url为http://www.pythonchallenge.com/pc/def/274877906944.html
print(2**38) #输出274877906944
LEVEL 1
仔细观察\(K→M,O→Q,E→G\)有什么规律,结论是后面的字母在字母表中都是前一个的索引加二,比如#\(K\)是第11个,\(M\)是第13个,所以我们也可以得出转换字符串的方法:
import string
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. "
l = string.ascii_lowercase + "ab" #每次都是+2,所以后面多加了2个字母,这是小写字母表
def tran(s):
tmp =""
for i in s:
if i in l: #如果当前处理的字符是字母
id = l.index(i)
tmp += l[id+2]
else:
tmp += i
return tmp
print(tran(a))
#输出了
"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. "
#翻译过来就是:
我希望你不是徒手进行这个字符转换,这是计算机擅长的事情,徒手做是很低效的,所以我才把这个文本弄得这么长,将刚才你写的处理字符串的函数用在url上试试
显然,调用一下就把url中的map换成了ocr,得到了下一关的url:www.pythonchallenge.com/pc/def/ocr.html
LEVEL 2
显然第三关要看清楚图片上的文字是不可能的,下面提示的文字里面有page source,于是马上想到查看网页源代码,于是看到了如下内容:
<!--find rare characters in the mess below:-->
然后就是一长串乱码
任务很显然,就是要找到下面很长一串代码中单独的元素,复制这么长的代码到ide里也不方便,所以可以用爬虫
import requests
from collections import Counter
text = requests.get("http://www.pythonchallenge.com/pc/def/ocr.html").text #获取HTML文档
final_text = text.split("<!--")[2][:-3] #用了比较蠢的方法,用“<!--"当做分隔符,[:-3]是为了清除最后的"-->"
q = Counter(final_text) #对里面的所有字符计数
t = [i for i in q if q[i]==1] #找出只出现一次的字符
print("".join(t))
#输出了equality
根据输出的内容很显然下一个网页的url为http://www.pythonchallenge.com/pc/def/equality.html
LEVEL 3
有了上一道题的经验,看了下图片和文字说明,题目的意思应该是:查找类似\(AAAbCCC\)这种格式的字符串,我果断查看了一下页面源代码,果然有一大堆文本在等着我去处理...
想起了正则表达式!,处理起来轻松多了
import requests
import re
text = requests.get("http://www.pythonchallenge.com/pc/def/equality.html").text
final_text = re.findall("<!--(.*?)-->", text, re.DOTALL)[-1] #re.DOTALL表示忽略换行符
ans = "".join(re.findall("[^A-Z]+[A-Z]{3}([a-z])[A-Z]{3}[^A-Z]+",final_text))
print(ans)
#输出了linkedlist
由此,我们得到了下一关的url:http://www.pythonchallenge.com/pc/def/linkedlist.php
LEVEL 4
点击图片之后发现url变成了http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=12345
提示说下一个nothing的值,抱着试试看的态度接连输入了几个,发现这个linkedlist很长很长,所以写了如下代码
import requests
import re
preurl = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing="
id = 12345
while True:
url = preurl + str(id)
text = requests.get(url).text
id = text.split(" ")[-1]
print(text)
#运行了一会之后终于出了结果peak.html
下一关的url为http://www.pythonchallenge.com/pc/def/peak.html
LEVEL 5
略坑,peakhell念快点就是pickle了,pickle是python的一个库,所以编写代码如下:
import pickle
from urllib.request import urlopen
import requests
text = pickle.load(urlopen("http://www.pythonchallenge.com/pc/def/banner.p"))
for line in text:
print("".join([k*v for k,v in line]))
输出结果为channel,所以下一关的url为http://www.pythonchallenge.com/pc/def/channel.html
LEVEL 6
习惯性地打开页面源代码,看到zip,下载http://www.pythonchallenge.com/pc/def/channel.zip后打开readme.txt文档看到
welcome to my zipped list.
hint1: start from 90052
hint2: answer is inside the zip
所以应该是要从90052.txt开始像之前的linkedlist一个个找下去,最后的输出是
Collect the comments.
翻zipfile的文档看到zipfile.comments,写了下代码
import zipfile, re
file = zipfile.ZipFile("channel.zip")
num = "90052"
comments = []
while True:
content = file.read(num + '.txt').decode("utf-8")
comments.append(file.getinfo(num + '.txt').comment.decode("utf-8"))
print(content)
match = re.search("Next nothing is (\d+)",content)
if match == None:
break
num = match.group(1)
print("".join(comments))
输出了hockey,http://www.pythonchallenge.com/pc/def/hockey.html,以为成功了,打开一看是:
it's in the air. look at the letters.
谜底是oxygen,所以正确的url应该是:http://www.pythonchallenge.com/pc/def/oxygen.html
The Python Challenge 谜题全解(持续更新)的更多相关文章
- SpringBoot面试题 (史上最全、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Linux面试题(史上最全、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Netty 面试题 (史上最全、持续更新)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- [转载] Python数据类型知识点全解
[转载] Python数据类型知识点全解 1.字符串 字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 Derek print(name.c ...
- Java基础面试题(史上最全、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 消息队列面试题、RabbitMQ面试题、Kafka面试题、RocketMQ面试题 (史上最全、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 好用的函数,assert,random.sample,seaborn tsplot, tensorflow.python.platform flags 等,持续更新
python 中好用的函数,random.sample等,持续更新 random.sample random.sample的函数原型为:random.sample(sequence, k),从指定序列 ...
- MyBatis逆向工程代码的生成以及使用详解(持续更新)
逆向工程简介什么是逆向工程: mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.ma ...
- python的一些学习资料(持续更新中)
Markdown在线编辑器 廖雪峰官方博客[基础入门好资料] python-guide[传说中的巨牛写的] the5fire的技术博客[全职python程序员博客]
随机推荐
- 小小知识点(一)——利用电脑自带的BitLocker对磁盘加密
1.利用电脑自带的BitLocker可以对固定的或移动的磁盘加密 网上有很多的使用方法步骤,可参考百度经验:https://jingyan.baidu.com/article/636f38bb4fac ...
- MySql实现分页查询的SQL,mysql实现分页查询的sql语句
一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,那我们知道MySql数据库提供了分页的函数limit m,n,但是该函数的用法和我们的 ...
- P66 整环的零元
R/I=0的零因子是0+I吗? 如果不是,那请问R/I的零因子是什么呢? R/I没有零因子 R/I的零元 是I中的元素定义的等价类 么 a是理想I的元素,自然也是R的元素
- JavaWeb连接SQLServer数据库并完成一个登录界面及其功能设计。
一.JDBC连接SQLserver数据库的步骤: 1.下载SQLserver的JDBC驱动文件——Microsoft JDBC Driver 4.0 for SQL Server 2.例如下载得到的文 ...
- Vue+min-width实现最大两栏布局
<style> .fitting-Modal-details{ overflow: hidden; } .detailsContent{ float: left; min-width: 5 ...
- [转帖]Docker容器CPU、memory资源限制
Docker容器CPU.memory资源限制 https://www.cnblogs.com/zhuochong/p/9728383.html 处理事项内容等 这一块内容感觉 不清楚.. 背景 在使用 ...
- 同一个机器 安装多个版本Chrome浏览器的方法
1. Chrome 现在安装直接没有任何提示 就直接安装了 而且自动式 高版本覆盖低版本安装 不给你任何选择版本的机会. 2. 但是chrome 的安装是基于用户的 所以 同一个机器 使用不同的用户 ...
- linux的一些基本命令
一.linux的一些基本命令(使用的是CentOS7系统): 1.创建用户组,创建新用户并添加到用户组 添加用户,添加用户组命令: 增加用户:useradd -d /usr/username -m u ...
- 校园电商项目3(基于SSM)——配置Maven
步骤一:添加必要文件夹 先在src/main/resources下添加两个文件夹 接着在webapp文件夹下添加一个resources文件夹存放我们的静态网页内容 WEB-INF里的文件是不会被客户端 ...
- RBAC模型
1.RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角 ...