介绍一个打怪升级练习Python的网站,寓教于乐了属于是!

简介: 介绍一个打怪升级练习Python的网站,寓教于乐了属于是!

这是一个学习 Python 的趣味网站,通过关卡的形式来锻炼 Python 水平。一共有 33 关,每一关都需要利用 Python 知识解题找到答案,然后进入下一关。很考验对 Python 的综合掌握能力,比如有的闯关需要用到正则表达式,有的要用到爬虫

一般情况下,我们学习 Python 都是按照章节顺序,比如从基本语法、基本数据类型、条件语句、循环语句、函数,面向对象等等来进行的,如果学习时间跨度过大,那么就很容易忘记前面的所学。此时正好可以拿这个网站来综合测试一下对 Python 的掌握情况,以便查缺补漏

下面我们来就来说一下这个网站怎么玩

微信图片_20220522211211.png

可以看到进入网站主页面,映入眼帘的就是一个很有年代感的画面,看来是一个年代比较久远的网站了,但是可千万不要因为网站建立的时间长就小瞧它哦!

接下来我们点击get challenged开始挑战

第0关,古香古色,哈哈哈,是让我们根据2的38次方来更改 url,这应该就算是热身运动吧,我们直接通过 Python 计算一下即可

微信图片_20220522211214.png

把计算的结果替换 url 中的0就可以进入到下一关了

接下来就是正式的关卡了,我们的游戏也正式开始!

微信图片_20220522211217.png

根据图片中的字母以及下方的提示,我们可以得出:前面的字母往后移动两位就是后面的字母

然后根据这个规律,重新计算最下方的一串字符

这里考察了 Python 当中字符串编码的相关知识

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.'''
def trans(text):
    new_text = ''
    for i in text:
        if str.isalpha(i):
            n = ord(i)
            if i >= 'y':
                n = ord(i) + 2 - 26
            else:
                n = ord(i) + 2
                new_text += chr(n)
        else:
            new_text += i
    print(new_text)
trans(text)


Output:

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”就可以拿到新的 url 了

trans("map")

Output:

ocr

此时我们把 url 中的 map 替换为 ocr 就可以进入下一关

微信图片_20220522211222.png


提示说可能在书里,哈哈哈,这是要看瞎的节奏,也可能在网页源代码里。我们通过右键查看源代码往下拉看到绿色区域

微信图片_20220522211333.png


看到一行提示:find rare characters in the mess below

意思就是要在下面这一大串字符里找到出现次数最少的几个字符

我们先使用 request 请求网页,然后通过正则表达式来获取字符

import requests
def get_challenge(s):
    return requests.get('http://www.pythonchallenge.com/pc/' + s).text
text = get_challenge('def/ocr.html')
str = ''.join(text)
import re
text = re.compile('<!--((?:[^-]+|-[^-]|--[^>])*)-->', re.S).findall(str)[-1]
counts = {}
for c in text: counts[c] = counts.get(c, 0) + 1
print(counts)

Output:

{'\n': 1221, '%': 6104, '$': 6046, '@': 6157, '_': 6112, '^': 6030, '#': 6115, ')': 6186, '&': 6043, '!': 6079, '+': 6066, ']': 6152, '*': 6034, '}': 6105, '[': 6108, '(': 6154, '{': 6046, 'e': 1, 'q': 1, 'u': 1, 'a': 1, 'l': 1, 'i': 1, 't': 1, 'y': 1}

可以看到出现次数最少的就是最后几个字符,合起来是「equality」,替换 url 字符 ocr 就可以进入下一关了

微信图片_20220522211226.png

好了,是不是挺有意思的,我们就不再继续剧透了,感兴趣的小伙伴可以自行探索,对于巩固 Python 基础知识还是非常有帮助的!

网站地址:http://www.pythonchallenge.com/

官方参考:https://garethrees.org/2007/05/07/python-challenge/

相关文章
|
6天前
|
网络安全 Python
网安之python基础学习练习(2-3)
本篇博文是关于网络安全课程中Python编程的学习实践总结。分享关于两个练习题目及其解决方案。第一个题目要求用户输入姓名并选择一项武技,使用for循环和if判断实现。第二个题目是删除列表中特定值(如&#39;cat&#39;)的所有元素,作者展示了两种方法,包括列表推导式和常规循环删除。接下来,文章还介绍了如何编写一个函数,随机生成一副扑克牌(除大小王),并返回一张随机抽取的牌。
|
6天前
|
存储 网络安全 索引
网安之python基础学习练习(1)
本篇博文是关于网络安全课程中Python编程学习的总结,主要内容包括:1) 常见数据类型的回顾和应用,如数字(整数、浮点数、复数)、字符串、列表、元组、集合、字典和布尔类型;2) 数据类型的实例操作,展示如何创建和使用这些类型;3) 数值类型之间的加、减、乘、除和模运算;4) 列表和元组的索引访问;5) 字典的修改,如查看键和值,以及更新值。文章强调了基础知识的重要性,并以“自满必定失败,骄傲必定后悔”作为每日一言。
|
14天前
|
Python
conda升级python版本
conda升级python版本
|
15天前
|
数据采集 机器学习/深度学习 供应链
python基于评论情感分析和回归、arima销量预测的购物网站选品
python基于评论情感分析和回归、arima销量预测的购物网站选品
|
18天前
|
Ubuntu Python
ubuntu升级Python版本
现在,你已成功升级了Python版本并可以使用新版本进行开发和运行程序。
34 1
|
19天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
27天前
|
Python
python 格式化、set类型和class类基础知识练习(下)
python 格式化、set类型和class类基础知识练习(下)
24 0
|
27天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
67 0
|
27天前
|
Python
python 文件操作和学生管理系统练习
python 文件操作和学生管理系统练习
22 0
|
1月前
|
数据采集 XML 存储
【Python】Python音乐网站数据+音频文件数据抓取(代码+报告)【独一无二】
【Python】Python音乐网站数据+音频文件数据抓取(代码+报告)【独一无二】