Python Challenge 过关心得(1)

正式开始第1关,这一关的URL的特殊部分是map

这关的图片上有一个本子,上面写着K→M,O→Q,E→G,稍微思索就能发现这几个字母都是按照字母表的顺序向后移动了两位,那么最投机取巧的方法就是把map的3个字母按照这个规则改动就行了。虽然这个是我想要的结果,但却并不是我想要的过程,还是得按照正规的编程方法来,而且下面还有其他的提示,姑且先全部看完。

图片下方有一行提示:三思而后解题。再下方是几行毫无规则的字母组合,很显然是要通过上述规则转化的。

对于这样的转换,很自然的想到的就是ASCII码。查阅资料后,发现python中ASCII码和字符的相互转换使用的是ord()函数和chr()函数。然后要注意的是y和z应该是要转换成a和b,那么这两个就是向前移动24位。写好程序之后发现一个问题,由于我用来记录转换后内容的是一个list表,如果直接print的话不利于阅读,继续查阅资料后发现join()函数可以实现list到string的转换,于是正式的代码如下:

 1 code = ‘g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. 2 bmgle gr gl zw fylb gq glcddgagclr ylb rfyrq ufw rfgq rcvr gq qm jmle. 3 sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.‘
 4
 5 decode = []
 6 for i in code:
 7     if ord(‘a‘) <= ord(i) <= ord(‘x‘):
 8         decode.append(chr(ord(i) + 2))
 9     elif ord(‘y‘) <= ord(i) <= ord(‘z‘):
10         decode.append(chr(ord(i) - 24))
11     else:
12         decode.append(i)
13 print(‘‘.join(decode))

运行后输出了转换后的提示:i hope you didnt translate it by hand. thats what computers are for.doing it in by hand is inefficient and thats why this text is so long.using string.maketrans() is recommended. now apply on the url.

果然按部就班的做完还是有好处的,提示里提到了string.maketrans()这个函数。根据python的官方文档说明,string.maketrans(from,to)函数给translate()函数提供一个从from映射到to的翻译表,而translate(s,table,[deletechars])函数则是从s中删除出现在deletechars里(如果有的话)的字符,再根据table的的规则进行转换。

于是使用string下的maketrans()和translate()的代码如下:

1 import string
2
3 code = ‘g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp.4 bmgle gr gl zw fylb gq glcddgagclr ylb rfyrq ufw rfgq rcvr gq qm jmle.5 sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.‘
6
7 print(string.translate(code, string.maketrans(‘abcdefghijklmnopqrstuvwxyz‘, ‘cdefghijklmnopqrstuvwxyzab‘)))

在第2关的左下角提示到,把URL里的pc改成pcc可以看到前一关的各种解法。点开一看果然很多,还包括了其他语言的解法。值得一提的是,一个解法中使用string.ascii_lowercase和string.ascii_lowercase[2:] + string.ascii_lowercase[:2]的写法代替了我的代码中‘abcdefghijklmnopqrstuvwxyz‘和’cdefghijklmnopqrstuvwxyzab‘这样看起来比较乱也容易出错的写法。首先,这里的string.ascii_lowercase就是从a到z的所有小写字母组合成的字符串,当然这里也可以写成string.lowercase,大部分情况下两者一样,但是有些特殊情况后者会有变化,同理还有string.ascii_uppercase和string.uppercase。其次,这里还用到了python中的切片,切片这个概念在看python的基本概念的时候有接触,但并没有机会用到,正好借此机会巩固一下。比如string.ascii_lowercase[2:]就是从string.ascii_lowercase[2]开始切片到字符串末尾,即从‘c‘到‘z‘,而string.ascii_lowercase[:2]就是从字符串开头切片到第2位,即‘ab‘,如果有个string.ascii_lowercase[3:6],那么就应该是‘def‘。

最后将map的翻译写进代码:

1 import string
2 ‘map‘.translate(string.maketrans(string.ascii_lowercase, string.ascii_lowercase[2:] + string.ascii_lowercase[:2]))

得到了进入下一关的关键字:ocr

时间: 2024-10-06 18:54:27

Python Challenge 过关心得(1)的相关文章

Python Challenge 过关心得(0)

最近开始用Openerp进行开发,在python语言本身上并没有什么太大的进展,于是决定利用空闲时间做一点python练习. 最终找到了这款叫做Python Challenge(http://www.pythonchallenge.com)的编程游戏. 这款游戏年代十分久远了,不过据说题目难度到后面挺大,我很怀疑会在某些关卡卡上很长一段时间,反正就尝试着做做看吧,能做多少做多少,现在水平低就做前面的简单的,等水平上去了再慢慢挑战后面的关卡. 最开始的其实是第0关,图片上是一个数字238,下方提示

Python Challenge——T2

想起来之前在学校论坛上看到大神推荐的一款python游戏 Python Challenge,于是做了几道题,还很有意思. 这是第二题,先放链接:http://www.pythonchallenge.com/pc/def/map.html 题目如下: 还有两段文字提示: everybody thinks twice before solving this. g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bm

Python Challenge 6

第6关: 既然下面的与riddle没有关系,那就不要管了啦,想哥什么时候有钱了再汇给你呗.现在还只是工科屌丝一枚. 看上面,除了一个注释<!--zip-->就没了,拉进url一试,yes, find the zip. 压缩文件,再拉一个channel.zip就弄出来了. 剩下的与第5关类似. the next nothing is ... import urllib import urllib.request import zipfile import os import os.path im

一个古老的编程游戏:Python Challenge全通攻略(转)

Python Challenge是一个网页闯关游戏,通过一些提示找出下一关的网页地址.与众不同的是,它是专门为程序员设计的,因为大多数关卡都要编程来算哦!! 去年和同学一起玩的,他做了大半,我做了小半,作弊了一些,33关全通,今天逛硬盘发现这个资料,拿出来晃晃. 非常非常非常非常好玩,强烈推荐编程的朋友都玩玩,不一定要会Python,我和我同学都不会,不过我们用C#一样能搞出来,没有障碍的. 0 http://www.pythonchallenge.com/pc/def/0.html 猜238,

python urllib2使用心得

python urllib2使用心得 1.http GET请求 过程:获取返回结果,关闭连接,打印结果 f = urllib2.urlopen(req, timeout=10) the_page = f.read() f.close()print the_page 2.http GET请求 + 包头 paras = "Token=1234567890;Uuid=0987654321" send_headers = {"Cookie": paras, "Us

python challenge趣味挑战赛

第0关 http://www.pythonchallenge.com/pc/def/0.html >>>print 2 ** 38 274877906944L 替换网址为http://www.pythonchallenge.com/pc/def/274877906944.html 第1关 http://www.pythonchallenge.com/pc/def/map.html 是个密码,字母往后移动两位,yz 变为 ab #!/usr/bin/env python # coding:

Python unittest模块心得

关于unittest模块的一些心得,主要是看官网的例子,加上一点自己的理解,官网地址:https://docs.python.org/3.6/library/unittest.html unittest模块是Python的单元测试框架,支持自动化测试,所有用例共享setUp和tearDown代码,可以将测试用例聚合成测试集合,测试用例与报告框架独立. 为了实现这些功能,unittest支持下面几个面向对象式的概念: test fixture:代表了执行一个或多个测试用例所需要的准备工作,以及所有

Python树莓派 爬虫心得

平台: 树莓派 linux 语言:python 搞一个爬虫都清楚是怎么回事,我这里玩过之后有下面的心得: 为什么要用树莓派呢,省电啊,没乱七八糟的桌面问题,可以一直开着. 1.树莓派上的磁盘写入对于不同格式是有区别的,我试过跑ntfs,开10线程就完全卡死不动了,wa(wait for io)很高.看了下原因是ntfs代码效率不高而且是在用户层的fuse基础上的,所以放弃换了ext4,后来又测试了一下准备上fat32(windows linux兼容).顺带试了一下vfat,也是fuse的,就是知

Python challenge 3 - urllib &amp;amp; re

第三个主题地址:http://www.pythonchallenge.com/pc/def/ocr.html Hint1:recognize the characters. maybe they are in the book, but MAYBE they are in the page source. Hint2: 网页源代码的凝视中有: find rare characters in the mess below:以下是一堆字符. 显然是从这对字符中找出现次数最少的:注意忽略空白符.出现次