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的转换,于是正式的代码如下:
code = 'g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp.\
bmgle gr gl zw fylb gq glcddgagclr ylb rfyrq ufw rfgq rcvr gq qm jmle.\
sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.' decode = []
for i in code:
if ord('a') <= ord(i) <= ord('x'):
decode.append(chr(ord(i) + 2))
elif ord('y') <= ord(i) <= ord('z'):
decode.append(chr(ord(i) - 24))
else:
decode.append(i)
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()的代码如下:
import string code = 'g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp.\
bmgle gr gl zw fylb gq glcddgagclr ylb rfyrq ufw rfgq rcvr gq qm jmle.\
sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.' 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的翻译写进代码:
import string
'map'.translate(string.maketrans(string.ascii_lowercase, string.ascii_lowercase[2:] + string.ascii_lowercase[:2]))
得到了进入下一关的关键字:ocr。
Python Challenge 过关心得(1)的更多相关文章
- Python Challenge 过关心得(0)
最近开始用Openerp进行开发,在python语言本身上并没有什么太大的进展,于是决定利用空闲时间做一点python练习. 最终找到了这款叫做Python Challenge(http://www. ...
- python urllib2使用心得
python urllib2使用心得 1.http GET请求 过程:获取返回结果,关闭连接,打印结果 f = urllib2.urlopen(req, timeout=10) the_page = ...
- python challenge第1关--NoteBook上的“乱码”
在 python challenge第0关中已经得到第1关的地址了: http://www.pythonchallenge.com/pc/def/map.html 一.观察地址栏和标签: What a ...
- Python Challenge 第四题
这一题没有显示提示语,仅仅有一幅图片,图片也看不出什么名堂,于是直接查看源代码,源代码例如以下: <html> <head> <title>follow the c ...
- The Python Challenge 谜题全解(持续更新)
Python Challenge(0-2) The Python Challengehttp://www.pythonchallenge.com/ 是个很有意思的网站,可以磨练使用python的技巧, ...
- The Python Challenge 0-4
The Python Challenge 0-4 项目地址:http://www.pythonchallenge.com/ Level-0 提示Hint: try to change the URL ...
- python challenge答案参考
Solutions to python challenge. http://garethrees.org/2007/05/07/python-challenge/ https://github.com ...
- Python Challenge 第一关
偶然在网上看到这个,PYTHON CHALLENGE,利用Python语言闯关,觉得挺有意思,就记录一下. 第0关应该算个入口吧,试了好几次才试出来,没什么代码就不写了.计算一个结果出来就行. 第一关 ...
- The Python Challenge 闯关笔记
The Python Challenge : http://www.pythonchallenge.com/ Level 0: 看提示图片中为2**38,计算值为274877906944. Hint: ...
随机推荐
- Oracle 中包的应用
包由两个分离的部分组成:包头(PACKAGE)和包体(PACKAGEBODY).包头是包的说明部分,是对外的操作接口,对应用是可见的;包体是包的代码和实现部分,对应用来说是不可见的黑盒. ...
- ASP.NET MVC3快速入门——第四节、添加一个模型
在本节中我们将追加一些类来管理数据库中的电影.这些类将成为我们的MVC应用程序中的“模型”部分.我们将使用一个.NET Framework的被称之为“Entiry Framework”的数据访问技术来 ...
- sign starfieldtech
signtool sign /f certfile.pfx /p password /tr http://tsa.starfieldtech.com /td SHA256 mycode.exe htt ...
- 【转】android移植之request_suspend_state: wakeup & init: untracked pid xx exited问题的解决
原文网址:http://blog.csdn.net/dragon101788/article/details/8187880 Bluetooth: HIDP (Human Interface Emul ...
- vs2005中无法修改控件ID
方法一:撤换到源代码模式下,通过代码更改id 方法二: 1.关闭VS2005: 2.删除目录 C:\Documents and Settings\Administrator\Local Setting ...
- RedHat9通过Host-only配置网络连接
首先我用的是VMware8版本安装的RedHat9.VMware给我们提供了三种让虚拟机里的安装系统连上网的方式.分别是Host-only,Bridge,NAT.我要讲的是Host-only. 第一步 ...
- QQ聊天界面的布局和设计(IOS篇)-第一季
我写的源文件整个工程会再第二季中发上来~,存在百度网盘, 感兴趣的童鞋, 可以关注我的博客更新,到时自己去下载~.喵~~~ QQChat Layout - 第一季 一.准备工作 1.将假数据messa ...
- thinkjs与Fine Uploader的邂逅
最近在做一个内部系统,需要一个无刷新的上传功能,找了许久,发现了一个好用的上传工具-Fine Uploader,网上也有不少关于它的介绍,对我有不少的启发,结合我的使用场景简单的介绍一下它与t ...
- Function.prototype.call.apply结合用法
昨天在网上看到一个很有意思的js面试题,就跟同事讨论了下,发现刚开始很绕最后豁然开朗,明白过来之后发现还是挺简单的,跟大家分享下! 题目如下: var a = Function.prototype ...
- android学习--TabHost选项卡组件
TabHost是一种非常有用的组件,TabHost能够非常方便地在窗体上放置多个标签页,每一个标签页获得了一个与外部容器同样大小的组件摆放区域.在手机系统的应用类似"未接电话".& ...