Python挑战游戏汇总
今天发现一个练习python的网站,http://www.pythonchallenge.com/ 感觉挺有意思的
连着看了3关,这个网站中每个挑战的结题思路很好玩, 用来练习python是再好不过了
总体上来说, 解密思路可以网上找一找,但是用实现解密的程序代码自己先写一写,然后再看看网上的大牛们,学习学习他们的思路
顺便推荐一个练习爬虫的网站: 黑板客
本文以后就是每一个关卡的汇总点了。
第一关入口:http://www.pythonchallenge.com/pc/def/0.html
#coding:utf-8
import urllib2
import HTMLParser
import re
from string import maketrans,translate,lowercase,punctuation
def get_html_Pages(url):
try:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0'}
#构建请求的request
request=urllib2.Request(url,headers=headers)
#利用urlopen获取页面代码
response=urllib2.urlopen(request)
#将页面转化为UTF-8编码格式
html=response.read().decode('utf-8')
html=HTMLParser.HTMLParser().unescape(html)#处理网页内容, 可以将一些html类型的符号如" 转换回双引号
return html
#捕捉异常,防止程序直接死掉
except urllib2.URLError,e:
print u"连接失败,错误原因",e.reason
return None
except urllib2.HTTPError,e:
print u"连接失败,错误原因:%s " % e.code
return None
#切割网址,得到要被替换的字符,最后一个斜线到小数点之间的内容
def get_replace_str_and_get_next_level_url(url,replace_str):
be_replace_str = url.split('/')[-1].split('.')[0]
return url.replace(be_replace_str,replace_str)
class PythonChallege:
def level0(self):
url_level_0='http://www.pythonchallenge.com/pc/def/0.html'#第0关的网址
next_level_tips=str(2**38)#提示信息
be_replace_str=url_level_0.split('/')[-1].split('.')[0]#要被替换的内容
print be_replace_str+" will be replace"
next_level_url=url_level_0.replace(be_replace_str,next_level_tips)#下一关网址
print 'next level url is :'+next_level_url
if urllib2.urlopen(next_level_url).code == 200:
print 'get right url'
def level1(self):
#字符转换函数
def translate_string(trans_string):
test_string='cdefghijklmnopqrstuvwxyzab'
test_string1='abcdefghijklmnopqrstuvwxyz'
test_table={}
#将一个list转换为字典的方法,字典格式为{list元素:list索引值}
for i in test_string1:
test_table[i]=test_string1.index(i)
tmp_final_string=''
for a in trans_string:
if a in test_string1:
tmp_final_string +=test_string[test_table[a]]
else:
tmp_final_string+=a
print u'翻译转换出来的语句是:'+tmp_final_string
return tmp_final_string
leve1_url='http://www.pythonchallenge.com/pc/def/map.html'
html=get_html_Pages(leve1_url)#获取网页内容
target_string_pattern=re.compile('<font color="#f000f0">(.*?)</tr>',re.S)#定义匹配字符串规则
target_string=re.search(target_string_pattern,html).group(1).strip()#得到网页上的那一行字符串
print u'网页上提示的字符串序列是:'+target_string
translate_string(target_string)
next_level_translate_str=leve1_url.split('/')[-1].split('.')[0]
print u'要被转换的网址内容是:'+next_level_translate_str
print get_replace_str_and_get_next_level_url(leve1_url,translate_string(next_level_translate_str))
def level2(self):
leve2_url='http://www.pythonchallenge.com/pc/def/ocr.html'
html=get_html_Pages(leve2_url)
tips_string_pattern=re.compile('<font size="-1" color="gold">.*?<!--.*?-->.*?<!--(.*?)-->',re.S)#定义匹配规则,获取网页中注释的内容
tips_string=re.search(tips_string_pattern,html).group(1).strip()
next_level_string=''
#找到字符串中的小写字母
for i in tips_string:
if i in lowercase:
next_level_string +=i
print next_level_string
print get_replace_str_and_get_next_level_url(leve2_url,next_level_string)#打印下一关的网址
def level3(self):
level3_url='http://www.pythonchallenge.com/pc/def/equality.html'
html=get_html_Pages(level3_url)#获取网页内容
tips_string_pattern=re.compile('<!--(.*?)-->',re.S)#定义匹配规则,获取网页中注释的内容
tips_string=re.search(tips_string_pattern,html).group(1).strip()
#匹配规则, 一个小写字母两边有且都有3个大写字母
find_pattern=re.compile(r'[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]')
print ''.join(re.findall(find_pattern,tips_string))
mychallenge=PythonChallege()
mychallenge.level3()

浙公网安备 33010602011771号