闯关过程

关卡入口地址: http://www.pythonchallenge.com/pc/def/map.html

打开页面是这样的:

在图中的你内容,可以看到

  • K->M
  • O->Q
  • E->G
直观上感受是,字符串对应解析
也就是说,26个英文字符依次和图片下面的那一串一一对应,找出对应的内容,而且是后面第二个, 比如 开头字母'g'  对应的应该是 'i'
思路分析:
1.获取网页内容,通过网页内容得到将要翻译的那段文字(当然也可以直接复制过去)
2.定义翻译规则
3.得到翻译之后的结果
PS: 因为这里翻译之后,根据提示,还是需要再次翻译一下网址,因此最后再次将网址翻译一下,得到最后下一关网址。
程序:
#coding:utf-8import urllib2
import HTMLParser
import re
from string import maketrans,translate,lowercase
def level1():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 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+=aprint u'翻译转换出来的语句是:'+tmp_final_stringreturn   tmp_final_stringleve2_url='http://www.pythonchallenge.com/pc/def/map.html'html=get_html_Pages(leve2_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_stringtranslate_string(target_string)#至此,内容已经翻译完毕,但是根据提示,需要对网址重新翻译next_level_translate_str=leve2_url.split('/')[-1].split('.')[0]print u'要被转换的网址内容是:'+next_level_translate_strnext_level_url=leve2_url.replace(next_level_translate_str,translate_string(next_level_translate_str))print u'下一关网址是:'+next_level_urllevel1()

运行结果

网页上提示的字符串序列是: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.
翻译转换出来的语句是:i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url.
要被转换的网址内容是:map
翻译转换出来的语句是:ocr
下一关网址是:http://www.pythonchallenge.com/pc/def/ocr.html

函数maketrans()

string.maketrans() 其实是和string.translate()一起使用比较好

string.maketrans() 是定义翻译规则, string.translate()则是按照翻译规则对字符串进行翻译

从帮助文档里面查看maketrans()的用法

maketrans(...)maketrans(frm, to) -> stringReturn a translation table (a string of 256 bytes long)suitable for use in string.translate.  The strings frm and tomust be of the same length.

即这个函数有两个 参数, 都是字符串,而且得一样长,它就是定义翻译规则的, 有点类似字典 从帮助文档里面查看 translate() 的用法

translate(s, table, deletions='')translate(s,table [,deletions]) -> stringReturn a copy of the string s, where all characters occurringin the optional argument deletions are removed, and theremaining characters have been mapped through the giventranslation table, which must be a string of length 256.  Thedeletions argument is not allowed for Unicode strings.
  1. s 是要被翻译的字符串
  2. table  是翻译规则
  3. [deletion] 是可选参数, 如果它定义了, 就从参数s中先删除 [deletion]里面的内容,然后在做翻译

最后返回的是翻译之后的内容 例子:

#coding:utf-8
import string    s = 'asked--deksa'    # 参数from和to的长度必须一致
table = string.maketrans('', '')   #这样写就把所有的str,即ASCII码包含了
#print table
print s.translate(table)   # 输出 asked--deksa  table = string.maketrans('ae', '12')  #从新定义翻译规则,a->1, e->2
print s.translate(table)   # 输出 1sk2d--d2ks1  # 将先删除'sk',然后再转换
print s.translate(table, 'sk')    # 输出 12d--d21 

改版程序:

#coding:utf-8
from string import  maketrans,translate,lowercasetext="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."
print lowercase
target_str=""
table= maketrans(lowercase,lowercase[2:]+lowercase[:2])
for i in text:if i in lowercase:target_str += translate(i,table)else:target_str +=i
print target_str
print translate('map',table)

翻译规则还可以这样写:

#coding:utf-8from string import lowercase, punctuation
#punctuation 就是那些符号
print punctuation
text = "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. "
这也就等于新的翻译规则了
map_str = dict(zip(lowercase+punctuation+' ', lowercase[2:]+lowercase[:2]+punctuation+' '))  #这里需要将空格再加上
trans_text = ''
for i in text: trans_text += map_str[i]
print trans_text

list转换为字典

将list元素与其索引值组成新的字典:

#coding:utf-8
from string import  lowercaselower_str_dict={}
for i in lowercase:lower_str_dict[i]=lowercase.index(i)
print lower_str_dict

输出:

{'a': 0, 'c': 2, 'b': 1, 'e': 4, 'd': 3, 'g': 6, 'f': 5, 'i': 8, 'h': 7, 'k': 10, 'j': 9, 'm': 12, 'l': 11, 'o': 14, 'n': 13, 'q': 16, 'p': 15
, 's': 18, 'r': 17, 'u': 20, 't': 19, 'w': 22, 'v': 21, 'y': 24, 'x': 23, 'z': 25}

还有一种方法

alph_map=dict(  zip(lowercase, [i for i in range(len(lowercase) )  ])  )
print alph_map

Python挑战游戏( PythonChallenge)闯关之路Level- 1相关推荐

  1. python闯关游戏,Python挑战游戏( PythonChallenge)闯关之路Level 0

    Python挑战游戏( PythonChallenge)闯关之路Level 0 Python挑战游戏( PythonChallenge)闯关之路Level 0 关卡入口地址:http://www.py ...

  2. Python挑战游戏( PythonChallenge)闯关之路Level 0

    关卡入口地址:http://www.pythonchallenge.com/pc/def/0.html 打开这个页面之后如下: 根据上面的提示,就是说把图画上内容的结果,计算出来,转换为url就OK了 ...

  3. Python挑战游戏( PythonChallenge)闯关之路Level- 6

    来来来,难得今天有点时间,闯关继续 照旧,先进入闯关入口,看一看这一关是怎么回事:http://www.pythonchallenge.com/pc/def/channel.html 单纯的从网页页面 ...

  4. Python挑战游戏( PythonChallenge)闯关之路Level- 4

    闯关过程 关口地址:http://www.pythonchallenge.com/pc/def/linkedlist.html 输入关卡地址发现, 提示信息要求将网址改为:http://www.pyt ...

  5. Python挑战游戏( PythonChallenge)闯关之路Level- 3

    闯关过程 闯关入口:http://www.pythonchallenge.com/pc/def/equality.html 根据页面提示, 应该是寻找字符串, 一个小写字母两边都是3个大写字母,类似如 ...

  6. Python挑战游戏( PythonChallenge)闯关之路Level- 2

    闯关过程 入口地址:http://www.pythonchallenge.com/pc/def/ocr.html 页面内容如下: 页面提示内容解析: 1.识别字符,可能在书中,也可能在页面内容中. 明 ...

  7. Python挑战游戏( PythonChallenge)闯关之路Level- 5

    时隔两个月, 又重新回来写博客了 今天重新来做这个挑战题目 首先入口地址:http://www.pythonchallenge.com/pc/def/peak.html 打开来看, 没错,你没有看错, ...

  8. python 面向对象编程tcp_python 闯关之路三(面向对象与网络编程)

    1,简述socket 通信原理 如上图,socket通信建立在应用层与TCP/IP协议组通信(运输层)的中间软件抽象层,它是一组接口,在设计模式中,socket其实就是一个门面模式,它把复杂的TCP/ ...

  9. Python 闯关之路一(语法基础)

    原文:https://www.cnblogs.com/wj-1314/p/8403977.html python 闯关之路一(语法基础) 1,什么是编程?为什么要编程? 答:编程是个动词,编程就等于写 ...

最新文章

  1. Python接口自动化测试框架(基础篇)-- 常用数据类型Number
  2. 牵引力教育学校分析UI设计师的薪酬水平
  3. 关于可观察性的三大支柱,你应该了解这些
  4. 【数理知识】《积分变换与场论》王振老师-第4章-矢量分析
  5. 蓝桥杯-送分啦(java)
  6. MFC实现Windows锁屏
  7. redis集群断电数据怎么恢复_如何做到 10T 集群数据安全备份、1GB/s 快速恢复?...
  8. 【转】列“xxx”不属于表 Table asp.net
  9. 苹果 Siri 被曝涉嫌泄露用户隐私;中国联通回应 5G 入网问题;PHP 7.4 beta 1 发布 | 极客头条...
  10. tab和TabHost
  11. Deployment vs ReplicationController in Kubernetes
  12. 使用java jpcap实现网络嗅探器
  13. [ArcPy] 1 ArcPy与栅格(Raster)
  14. 齐次线性方程组、齐次方程、齐次多项式
  15. 判断Linux环境是否装了NCCL,Ubuntu 16.04安装NCCL 2
  16. folly库安装(4)folly依赖的重要组件安装:double-conversion, google-gflags, glog, fmt, googletest, boost等
  17. 使用Java的讯飞语音识别示例
  18. 计算机毕业设计java+ssm的仓库进销存系统(源码+系统+mysql数据库+Lw文档)
  19. 微机原理与接口技术 8255和8253综合应用之交通灯控制器的设计
  20. finashell安装不能打开要写入的文件

热门文章

  1. 大数据学习-用户画像
  2. OpenSSL ssL_read: Connection was aborted,errno 10053 报错
  3. 在pycharm里安装pymysql
  4. 【CV】高被引行人重识别(Person Re-ID)综述论文
  5. 绘图软件origin使用总结
  6. dcloud 本地存储
  7. 重装系统win11服务器未响应怎么修复操作
  8. 软件测试怎么做?靠谱第三方软件测评公司有哪些?
  9. C语言冒泡排序(从大到小排序核心代码)
  10. 使用EasySysprep 4和ghost来封装、备份及还原Windows操作系统