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()


posted @ 2017-05-11 17:39  枫奇丶宛南  阅读(59)  评论(0)    收藏  举报