The Python Challenge爬塔记录0—2

sunmengqi    2018-11-13 09:19

    最近一直在The Python Challenge网站“爬塔”,The Python Challenge是个很有意思的小网站,具体介绍见百度链接https://baike.baidu.com/item/Python%20Challenge/6234024?fr=aladdin

    网站或网址是http://www.pythonchallenge.com/ , 有兴趣的同学可以一起来“爬塔”。

    闲话少说,进入上述网址之后,就可以看到画风清奇的网站主页面,如下图。

 

 

 

 

 

 

 

 

 

    然后点击“Click here to get challenged”就可以开始愉快的爬塔之旅啦

    点击后之进入到level 0关卡,如图:

    可以看到,图的下面有提示,这一关的解题思路是改变URL地址。图中的数字就是答案的关键。我们看到,原本的URL地址是“http://www.pythonchallenge.com/pc/def/0.html”,在解题的过程中,第一步我试图改为“238.html”,发现并不正确,后来仔细看了之后发现这数字是2的38次幂的意思,于是将URL改为“http://www.pythonchallenge.com/pc/def/274877906944.html”,于是正确过关,进入level 1 关卡。

   关卡内容如图所示:

 

    我们看到图中所示的提示“K->M  O->Q  E->G”,是字母替换,很容易发现均是向后位移两位,那么我就试图将下面那一长串乱七八糟的字符串按照同样的方法,应该就能得到解题的答案。

    那么闲话少叙,代码解决:

"""The Python Challenge LEVEL 1"""
ss = "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 level_1(s):
	if s.isalpha():
		return chr((ord(s)-ord('a') + 2)%26 + ord('a'))
	else:
		return s
if __name__ == '__main__':
	result = []
	for s in ss:
		result.append(level_1(s))
	print(''.join(result))

    最后得到结果为:“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.”

    这提示就很明显了,好吧这已经不能说是提示了。

    上面说建议使用string.maketrans()方法,不过由于版本的迭代,在Python3.4之后就没有了string.maketrans( )方法,取而代之的是bytearray.maketrans( )、bytes.maketrans( )、str.maketrans( )方法。

    代码改进后是酱紫的:

"""The Python Challenge LEVEL 1"""
import string
ss = "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 level_1_final(ss):
	trans = str.maketrans(string.ascii_lowercase, string.ascii_lowercase[2:] + 
            string.ascii_lowercase[:2])
	result = ss.translate(trans)
	return result

if __name__ == '__main__':
	result = level_1_final(ss)
	print(result)

    Ok!第一关最后一步按照上述说法,把方法用在URL上,这一关的URL是“map”,转换“map”得到“ocr”,所以下一关网址不出意料是“http://www.pythonchallenge.com/pc/def/ocr.html”。于是进入level 2

    第二关如图:

    提示说:密码可能隐藏在图片的书中或者源码中。依照这个马赛克的画质来看,在书里面找密码简直是弱智的行为,所以我们就到源码里面看看。

    

    可以看到提示:在下面这坨中找出重复最少的字符。讲道理做这个网站的人真的有毒。

    首先将这一串字符串复制下来,作为字符串"str1",然后使用count()方法,代码如下:

#将字符串转换为列表
list=list(str1)
#定义一个列表存储字符的种类
kinds=[]

#遍历字符
for i in str1:
    #列出字符种类,并且去掉回车
    if i != '\n' and i not in kinds:
        kinds.append(i)
for items in kinds:
    print(items,list.count(items))

    最后得到输出如图:

   由此得到下一关网址:http://www.pythonchallenge.com/pc/def/equality.html

Views: 2.0K

[[total]] comments

Post your comment
  1. [[item.time]]
    [[item.user.username]] [[item.floor]]Floor
  2. Click to load more...
  3. Post your comment