介绍一个打怪升级练习 Python 的网站,寓教于乐~

Posted AI科技大本营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了介绍一个打怪升级练习 Python 的网站,寓教于乐~相关的知识,希望对你有一定的参考价值。

作者 | 周萝卜

来源 | 萝卜大杂烩

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

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

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

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

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

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

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

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

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

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

这里考察了 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 就可以进入下一关

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

看到一行提示: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 就可以进入下一关了

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

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

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

技术

100行python代码制作鞭炮

资讯

算力超越iPhone,芯片堪比Mac

技术

31个好用的Python字符串方法

资讯

游戏圈地震级消息,微软收购动视暴雪

分享

点收藏

点点赞

点在看

以上是关于介绍一个打怪升级练习 Python 的网站,寓教于乐~的主要内容,如果未能解决你的问题,请参考以下文章

Magic Sketch——寓教于乐的哄娃神器

寓教于乐,在游戏中学习Vim命令

BBC力作!非常难得的STEAM主题宝藏动画片!跨学科学习,寓教于乐!

sin之舞---蓝桥杯练习

蓝桥杯练习系统—基础练习 sine之舞

python随笔