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

article/2025/9/12 14:52:14

闯关过程

关卡入口地址: 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







http://chatgpt.dhexx.cn/article/DobNNyx0.shtml

相关文章

chatgpt赋能Python-pythonchallenge

Python Challenge: 挑战你的Python技能 如果你正在寻找一种提高Python编程技能的有趣方法&#xff0c;那么Python Challenge是一个不错的选择。Python Challenge是一个在线的puzzle游戏&#xff0c;每个挑战都需要使用Python编写程序来解决。这些挑战是由一个名叫Nadav Samet的…

Python Challenge 第2关

http://www.pythonchallenge.com/pc/def/ocr.html recognize the characters. maybe they are in the book, but MAYBE they are in the page source. 第2关&#xff1a;从现在开始&#xff0c;要从页面中寻找答案了。其实是在注释中。从页面源码中可以发现其有一段注释&#x…

pythonchallenge(0-4)

pythonchallenge 0&#xff1a;网址&#xff1a;http://www.pythonchallenge.com/pc/def/0.html 网页提示&#xff1a;try to change the URL addres。网站的图片提示如下&#xff1a; 图片的意思是网址为2的38次方 print(2**38)得到下一关的网址&#xff1a;http://www.pyt…

Python Challenge

Level 0 [1] Hint: try to change the URL address. 第零关主要让人熟悉游戏规则和形式。首先观察标签栏主题显示的是warming up&#xff0c;表明这关的主题是热身。页面图片下标注一行小提示尝试改变url的地址。在没有别的提示下&#xff0c;明显是改成图片内的内容&#xff0…

pythonchallenge(5-9)

pythonchallenge 5&#xff1a;网址&#xff1a;http://www.pythonchallenge.com/pc/def/peak.html 查看页面源代码有提示.peak hell sounds familiar.考察的是标准库pickle的。pickle模块用来实现python对象的序列化,反序列化。构建payload: import urllib.request as urt i…

Python Challenge 题解 [0-4]

Challenge 0 转到 Python Challenge 题目0 分析 从图片中可看出,该题的答案应为2的38次方 完整程序 2**38Challenge 2 转到 Python Challenge 题目 everybody thinks twice before solving this. g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dm…

pythonchallenge闯关——第一弹

说在前面 pythonchallenge是一个很古老的很优秀的一款python学习路径&#xff0c;我也是知乎搜到后&#xff0c;这里安利给大家&#xff0c;网址是&#xff1a; pythonchallenge 界面是介样子的 &#xff1a; P.S. 本人也是python小白&#xff0c;在这里记录自己的学习路径&…

PythonChallenge闯关详解

前言 PythonChallenge是国外的一位工程师设计的一套编程闯关游戏&#xff0c;网址&#xff1a;PythonChallenge&#xff0c;每一关都可以用一段Python程序解决问题得到下一关的入口&#xff0c;本博文作为一个学习笔记&#xff0c;通过边学边记的方式分享我的闯关经验。 0 图片…

scanf返回值被忽略问题

解决Visual Studio中scanf返回值被忽略问题 最近在使用Visual Studio编写c语言时遇到了scanf返回值被忽略问题 总结了如下几种解决方法&#xff1a; 方法一&#xff08;不建议&#xff09; scanf修改成 scanf_s 可以说scanf_s是vs编译器特有的&#xff0c;它认为scanf不安全&…

scanf库函数的返回值

目录 一背景&#xff1a; 二 scanf返回值规则 1.在格式字符串为用%d的情况下 (1)输入5 6此时scanf能正确读入的数据为两个&#xff0c;返回值为2 scanf正确读入概念补充 (2)如果输入5 t此时能正确读入的数据为1个&#xff0c;返回值为1。 (3)如果输入1 2.5 (4)输入t 5&a…

scanf的返回值被忽略

scanf的返回值被忽略 在编译器VS2019和VS2022中&#xff0c;在使用scanf函数时会报错&#xff0c;具体错误scanf的返回值被忽略。 解决办法 方法一 可以直接将scanf改成scanf_s,因为编译器觉得scanf_s这是比较安全的函数。 方法二 我们可以关闭VS2019和VS2022编译器的安全检查…

scanf返回值被忽略的办法

1、右击项目&#xff0c;点击属性 2、在预处理定义中输入_CRT_SECURE_NO_WARNINGS&#xff0c;点击确认 需要注意的是如果再创建了一个项目需要重新再设置一次哦&#xff01;或者把sanf改为scanf_s也可以哦。

为什么VS/VsStudio当中警告返回值被忽略“scanf” ?VsStudio中scanf返回值被忽略的原因及其解决方法

警告原因&#xff1a;Vs 认为 scanf 函数不安全 所以提示警告⚠ 解决方案一&#xff1a; 只需将 scanf() 替换为 scanf_s() 原因&#xff1a;scanf_s 是 VsStudio自己定义的函数 功能和 scanf() 类似&#xff0c; 所以不会有警告 优点&#xff1a; 正常运行不会再有警告 …

VS2022中scanf返回值被忽略的原因及其解决方法

额 产生原因&#xff1a; scanf()函数在读取时不检查边界&#xff0c;所以可能会造成内存泄漏。有一定的安全隐患。 此时会提醒你把scanf换为scanf_s&#xff1b;BUT&#xff0c;scanf_s是VS特有的函数&#xff0c;写了之后在别的编译器上就无法执行&#xff0c;使得代码的可移…

scanf返回值

转载于:https://www.cnblogs.com/fairy-wzp/p/6926244.html

两个办法轻松解决VS中”scanf返回值被忽略“问题

出现原因&#xff1a; 在ANSI C中只有scanf()&#xff0c;没有scanf_s()&#xff0c;但是scanf()在读取时不检查边界&#xff08;忽略检查返回值&#xff09;&#xff0c;所以可能会造成内存泄漏&#xff0c;于是Microsoft公司在VS编译器中提供了scanf_s()&#xff08;注意只有…

【C语言入门】VS编译器:scanf返回值被忽略

一、发现问题 学习C语言中使用VS编译器&#xff0c;期间使用scanf函数会遇到报错警告&#xff1a;返回值被忽略&#xff1a;"scanf"的情况。 二、分析问题 这个问题是因为scanf不检查边界&#xff0c;会引起内存泄露&#xff0c;造成安全隐患。虽然微软VS编译器中…

解决“scanf返回值被忽略”一劳永逸的方法

首先我们需要下载一个软件&#xff1a;Notepad 然后在VS的安装路径中找到一个文件&#xff1a;newcfile.cpp 我的路径是上面那个&#xff0c;可能不同人的路径不一样&#xff0c;可以在搜索栏中直接搜索。 鼠标右击&#xff0c;点开红圈里的Notepad 来到一个界面&#xff0c;把…

VS2019:scanf返回值被忽略

一、问题再现 如下是笔者在学习数据结构中的二叉树时遇到的问题&#xff1a; 报错警告&#xff1a;返回值被忽略&#xff1a;"scanf"。 二、问题分析 百度一下之后大致原因是&#xff1a;scanf()函数在读取时不检查边界&#xff0c;所以可能会造成内存泄漏。有一定…

scanf返回值被忽略的原因及其解决方法(vs2019)

在使用Visual Studio 2019编写C语言程序时相信大家都遇见了scanf返回值被忽略这个问题 存在的问题就是scanf函数输入不安全&#xff0c;其实在vs编译器环境下&#xff0c;这种不安全的函数有很多。 为了解决这个问题&#xff0c;编译器给了三种方法 方法①&#xff1a; 是用…