今天上网搜了一下编程游戏,找到了一个叫PythonChallenge的编程游戏,看了下简介,是一个可以借助程序来解决问题的闯关游戏,题目其实比较类似ACM的,但其巧妙的提示和趣味性较强的闯关模式激起了我的兴趣。而且发现喜欢玩的人挺多的,所以我就打算用Python编程来解决这些问题。

PythonChallenge

虽然我的Python基础几乎为0,不过我坚信语言相通,于是今天花了1个下午的时间一边解题,一边学了下Python的基本操作,比如文件读取,循环操作,字符转化。

当然开始前需要装好Python的环境,这个比Java简单,windows系统只要去官网下载安装包,双击安装完就行了。于是我就在办公电脑上装好了环境,并使用自带的IDLE开始写代码。

为了让大家能自己动手解决问题,所以我只提供程序,不展示答案,也希望想学习Python和算法的同学能自觉的练习,因为现在所有关卡网上都有答案了。

第一题

题目意思很简单,让我们修改url,看了图片,我的确不太懂。我尝试了把0改成2,改成238,但都不行,然后我无耻的去网上搜答案了。答案居然是坑爹的2的38次方。看来我低估这个第一题了,那么2的38次方,在百度搜“2^38”就能出来答案,或者用系统的计算器计算就行。当然题目本意是让我们用编程来解决,所以我还是老老实实写了段代码。
可以看出Python的语法很精练,缩进功能非常强大。

i = 1
ans = 2
while a < 38:
	ans *= 2
	i += 1
print ans

第二题

看了图片基本就能懂题目的意思了,就是把一个字母换成其字典序中后两位的字母。但这是提示,真正的题目需要用这种方式转化回来才能看懂。虽然题目不长,但一个个人工转化还是比较浪费精力的。需要注意的是,z需要转化成b,而且有些标点是不需要转化的。
这里主要用到了ord(),chr()等方法,另外isalpha()这个方法()别忘了,我用自动补全没给我打上(),害我以为Python语法就是这样,后来调试了半天。

str = "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."
ans = ''
for c in str :
	if c.isalpha():
		tmp = ord(c)+2
		if tmp > ord('z'):
			tmp -= 26
		ans += chr(tmp)
	else:
		ans += c
print ans

第三题

题目告诉你去看页面的源码,那我们就来右键看源码吧,很多浏览器都支持看页面源码。我们发现有一大堆被注释掉的,那就是题目和数据了。题目让我们找出其中的出现次数最少的字符。因为这堆数据太大了,用肉眼显然不现实了,直接贴到代码里赋值也不太合适,所以就先用文件保存吧。因为发现字母挺少的,所以我习惯性的用ctrl+F搜了几个字母,发现还真有一些藏在里面。所以我就写了段代码把里面的字母找了出来。
本题主要就使用了文件操作,没有其他特别的语法。

file = open('D://Program Files//Python//tmp.txt')
ans = ''
tmp = file.read()
for c in tmp:
	if c.isalpha():
		ans += c
print ans

本来已经看好了第四题开始编码了,但是IDLE的自动补全有点不智能(跟VisualStudio和Eclipse比起来差距太明显了),所以我想换个IDE,然后就折腾了很长时间。所以第四题就等下次有空再来解答了。

PythonChallenge的确是个非常好玩的东西,而且Python的语法强大我也一下子就被吸引住了,以前我也想自学Python,不过没有兴趣驱动。PythonChallenge这个网站挺有创意的,唯一的遗憾是题目少了点,才33个。有兴趣的同学其实可以自己开发一个类似的站,我认为难度并不大。

本文为爱撸小杰原创