python怎么识别出一行文字里的url地址_Python谜题大闯关之小试牛刀

大家好,我是HELLO.WORLD,一个喜欢写(玩)代(游)码(戏)的小学生。

近期发现一个流行的游戏叫做Python Challenge,是互联网第一个需要借助编程的解谜?️游戏,已有三百多万人尝试过了,地址是:http://www.pythonchallenge.com/。

虽然用各种编程语言都可以,但是Python是最方便的,主要因为目前我还只会Python?

7473ae36545759cae8908b5946fba95c.png

闲话少说,让挑战开始吧!

热身题

先通过热身题摸索一下套路吧!谜题地址是:http://www.pythonchallenge.com/pc/def/0.html,如下:

276c546c077051a788f024bd42200c44.png

这幅图的背景是一片森林,然后上面有三个数字2、3、8,2在下面3和8在上面,背后的森林应该只是迷惑我们的,估计和答案没啥关系了,但是也不能忽视。Hint是中文提示的意思,让我们尝试修改URL(就是浏览器中地址的意思)。难道……

Python Challenge官方给出了游戏玩法提示:1、善加利用提示,它们大多数时候很有(迷)用(惑)。2、仔细研究给到的数据。3、不要在网上搜索答案。柯南图片下面将有剧透,请确定后再往下翻 ?

63259ecd15214af90f6d0d395baf29af.png

当前地址是0.html,我尝试着把地址从0改到1试一下,得到:

ad3225554d517c75006c0d5e3750d083.png

果然得到了提示!2**38在Python语言中就是2的38次方的意思,自然比1大很多,那么这道题的答案应该就是:

2**38

Python给出计算结果是274877906944。用274877906944替换URL中的0,即输入http://www.pythonchallenge.com/pc/def/274877906944.html,便可以顺利跳转到第1关!果然,森林跟答案没关系。顺利过关???

第一关

这关的地址是由热身题的答案地址跳转而来:http://www.pythonchallenge.com/pc/def/map.html。

24527b03f4a6e3f79a1ad2bf34464cac.png

图中有个笔记本,上面写了六个字母。提示是:

everybody thinks twice before solving this.

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.

上面这幅图的意思是把K变成M、O变成Q,E变成G,但是呢,我们看最下面那行杂乱无章的字母,肯定就是我们需要解出的这个谜底了,但是,只把K变成M、O变成Q,E变成G,这行字母还是杂乱无章。那么我们从这三个里推断出了什么呢?提示又说要每个人think twice,难道说……

eb9f27c343f23b9ec1ad4295c43ac9ec.png

那么我们把下面这行话全部往后两位:

content = "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."for i in content:    j = chr(ord(i) + 2)    print(j, end='')

Python计算结果是:

i"hope"you"didnt"tr{nsl{te"it"|y"h{nd0"th{ts"wh{t"computers"{re"for0"doing"it"in"|y"h{nd"is"inefficient {nd"th{t)s"why"this"text"is"so"long0"using"string0m{ketr{ns*+"is"recommended0"now"{pply"on"the"url0

对于content中每个字符,先通过ord求这个字符对应的Unicode编码,加2后再把它变回字符,我们最后再打印出来这个每一个字符的。相关的知识在通过Python给比尔盖茨洗地板一文中已经有讲解,可以参考。

我们可以发现,解出来的这行话还是有点奇怪的,但我们至少可以发现规律。这行话里原本的空格变成了引号、a变成了花括号等等,b变成了竖杠,然后0代表的就是句号。然后翻译到下面我们会发现,这里有一个叫maketrans的东西,我觉得有可能就是这道题的答案,所以填在了URL里面,结果出现了这一行字:

d868cbf2b5ec8e61deb355276dcd9cb4.png

上网查了一下,果然是Python中的一个内置的函数,所以我又用这个函数重新做了一遍,特别修正了a和b的情况:

content = "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."intab = "abcdefghijklmnopqrstuvwxyz"outtab = "cdefghijklmnopqrstuvwxyzab"trans = string.maketrans(intab, outtab)print(content.translate(trans))

经过maketrans后出来的结果就比较规律了:

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.

根据提示,我们用这个trans对map再做一遍,就直接求出ocr,把ocr填到地址栏里面就对了。

print ("map".translate(transtab))

Python计算的结果是:ocr。

在计算机技术中,OCR可以是Optical Character Recognition的缩写,是指扫描纸张并把图片识别成文字处理软件如Word或者Pages可以处理的字符。挑战的答案为ocr,也蕴含了字符正确识别的寓意。

果然,我们顺利来到了下一关!

怎么样!是不是有种在电脑上玩密室逃生的感觉!虽然我和爸爸一起公然玩游戏,可是居然妈妈在边上露出了慈祥的微笑,真是一种光明正大玩游戏的方式呢!挑战太神奇了,让我脑细胞快速动了起来,我认为这是最好的学(玩)编(游)程(戏)的方式!我们需要善加利用提示,提示至少大多数时候很有用。此外,还要仔细研究给到的数据。好啦,这次就到这吧,下期再见喽!

我是HELLO.WORLD,一个写代码的小学生,请大家继续关注我的公众号并欢迎转发,共同进步,谢谢 ?

PS:特别感谢“无名氏”同学的修改意见 ?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值