PythonChallenge-2

2019-05-21  本文已影响0人  临街窗

第三关

提示信息说的是信息可能在书中,也可能在网页源码中
这书上的文字我是看不清了,于是查看网页源码
发现如下


2-1.PNG

源码中有两段注释
第一段是说 在下面的乱码中查找稀有字符
第二段 就是一堆乱码
稀有字符是什么意思暂时不懂,不过反正那段乱码是有用的,先下载或者复制下来

python 代码实现

import requests, re

url = "http://www.pythonchallenge.com/pc/def/ocr.html"
res = requests.get(url=url)

# 获取网页源码
html = res.text
# 正则预编译
regex = re.compile(r"<!--.*?-->.*?<!--(.*?)-->", re.S)
# 匹配获取需要的乱码内容
text = regex.search(html).group(1)

下载之后看了半天这段乱码,没搞懂这个稀有到底是什么意思
后来灵机一动,稀有应该指的是数目,就是字符在这段乱码中的数目
接下来统计这段乱码中各个字符的数量,使用Counter

python代码实现

import requests, re
from collections import Counter         # python统计常用的类

url = "http://www.pythonchallenge.com/pc/def/ocr.html"
res = requests.get(url=url)

# 获取网页源码
html = res.text
# 正则预编译
regex = re.compile(r"<!--.*?-->.*?<!--(.*?)-->", re.S)
# 匹配获取需要的乱码内容
text = regex.search(html).group(1)

# 构建counter
counter = Counter(text)

print(counter.most_common())  # 获取输出 most_common() 指定一个参数n,列出前n个元素,不指定参数,则列出所有 
# 输出结果
# [(')', 6186), ('@', 6157), ('(', 6154), (']', 6152), ('#', 6115), ('_', 6112), ('[', 6108), ('}', 6105), ('%', 6104), ('!', 6079), ('+', 6066), ('$', 6046), ('{', 6046), ('&', 6043), ('*', 6034), ('^', 6030), ('\n', 1221), ('e', 1), ('q', 1), ('u', 1), ('a', 1), ('l', 1), ('i', 1), ('t', 1), ('y', 1)]

最少的字符依次是equality
将其替换url, 成功进入下一关
http://www.pythonchallenge.com/pc/def/equality.html
进入下一关

附录

from collections import Counter


# Counter目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。


# 初始化Counter的四种方式
c = Counter()                      # 初始化一个空白的counter
c = Counter(iterable)          # 从一个可迭代对象创建 字符串列表 元祖等等
c = Counter({"a": 1, "b": 2})       # 从字典创建
c = Counter(a=1, b=2)      # 键值对创建 


# 访问元素
c["a"]      # 与字典方式类似


# Counter的增加和减少
c = Counter("hello world!")
c["h"]    # 输出1

# 增加计数器统计
c.update("hi")
c["h"]   # 输出2
c.update(h=4)
c["h]    # 输出6 

# 减少计数器统计
c.c.subtract("hh")
c["h"]      # 输出4
上一篇下一篇

猜你喜欢

热点阅读