the python challenge 的第二关:
前言:小白的python学习笔记
它给了一张书的图片,配词为recognize the characters. maybe they are in the book,but MAYBE they are in the page source.重点在page source,即为源代码
所以我用快捷键Ctrl+U找到了网页的源代码,源代码中有一句话为:find rare characters in the mess below:
额,当看到这句话下方的乱码的时候,我一度以为找错了源代码,有点懵
作为小白真的是无从下手,所以只好找了度娘,了解到了counter函数,由于我不会提取源代码的方法,所以我选择了粘贴复制(嘿嘿)
以下为代码:
from collections import Counter
text='''那一长串乱码(粘贴复制)'''
c=Counter(text)
print(c.most_common())
#此代码为统计乱码中特殊字符的个数
代码结果为:
通过此代码发现一些字符只出现过一次
然后通过以下代码将其连接起来:
from collections import Counter
text='''那一长串乱码(粘贴复制)'''
c=Counter(text)
print(''.join([i[0] for i in c.items() if i[1]==1]))
结果为:
效仿上一关,用equality替代当前页面的url即可,下一关即为:
笔记:
1.Counter类
如果要使用 Counter,必须要进行实例化,在实例化的同时可以为构造函数传入参数来指定不同类型的元素来源。
from collections import Counter
# 实例化元素为空的 Counter 对象
a = Counter()
# 从可迭代对象中实例化 Counter 对象
b = Counter('chenkc')
# 从 mapping 中实例化 Counter 对象
c = Counter({'a':1, 'b':2, 'c':3})
# 从关键词参数中实例化 Counter 对象
d = Counter(a = 1, b = 2, c = 3)
2.counter特有的方法 most_common
most_common([n])是 Counter 最常用的方法,返回一个出现次数从大到小的前 n 个元素的列表。
from collections import Counter
c = Counter({'a':1, 'b':2, 'c':3})
>>> print(c.most_common()) # 默认参数
[('c', 3), ('b', 2), ('a', 1)]
>>> print(c.most_common(2)) # n = 2
[('c', 3), ('b', 2)]
>>> print(c.most_common(3)) # n = 3
[('c', 3), ('b', 2), ('a', 1)]
>>> print(c.most_common(-1)) # n = -1
[]
n为可选参数,通过上面的代码可以总结出:
不输入n,默认返回所有;
输入n小于最长长度,则返回前n个数;
输入n等于最长长度,则返回所有;
输入n = -1,则返回空;
参考(https://blog.csdn.net/weixin_39859819/article/details/111181049)
3.item方法(c.items()转换成dict_items)
items() 方法的遍历:items() 方法把字典中每对 key 和 value 组成一个元组,并把这些元组放在列表中返回。
d = {'one': 1, 'two': 2, 'three': 3}
>>> d.items()
dict_items([('one', 1), ('two', 2), ('three', 3)])
>>> type(d.items())
<class 'dict_items'>
>>> for key,value in d.items():#当两个参数时
print(key + ':' + str(value))
one:1
two:2
three:3
>>> for i in d.items():#当参数只有一个时
print(i)
('one', 1)
('two', 2)
('three', 3)
参考:https://www.runoob.com/python/att-dictionary-items.html
4.join()函数
语法: ‘sep’.join(seq)
参数说明
sep:分隔符。可以为空
seq:要连接的元素序列、字符串、元组、字典
上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串
返回值:返回一个以分隔符sep连接各个元素后生成的字符串
#对列表进行操作(分别使用' '与':'作为分隔符)
>>> seq1 = ['hello','good','boy','doiido']
>>> print ' '.join(seq1)
hello good boy doiido
>>> print ':'.join(seq1)
hello:good:boy:doiido
#对字符串进行操作
>>> seq2 = "hello good boy doiido"
>>> print ':'.join(seq2)
h:e:l:l:o: :g:o:o:d: :b:o:y: :d:o:i:i:d:o
#对元组进行操作
>>> seq3 = ('hello','good','boy','doiido')
>>> print ':'.join(seq3)
hello:good:boy:doiido
#对字典进行操作
>>> seq4 = {'hello':1,'good':2,'boy':3,'doiido':4}
>>> print ':'.join(seq4)
boy:good:doiido:hello
参考:https://blog.csdn.net/weixin_42828571/article/details/104167153
疑问:
对网页源代码进行提取搞不清楚,尝试了一些也总出错,希望有大佬可以提点一下,谢谢