美文网首页
PythonChallenge-2

PythonChallenge-2

作者: 临街窗 | 来源:发表于2019-05-21 21:45 被阅读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
    

    相关文章

      网友评论

          本文标题:PythonChallenge-2

          本文链接:https://www.haomeiwen.com/subject/pkuszqtx.html