百度飞浆领航团零基础python速成营学习心得

一.统计英语文章词频并排序
统计英语6级试题中所有单词的词频,并返回一个如下样式的字典

{‘and’:100,‘abandon’:5}

英语6级试题的文件路径./artical.txt

Tip: 读取文件的方法

> def get_artical(artical_path):
    with open(artical_path) as fr:
        data = fr.read()
    return data
 
get_artical('./artical.txt')

处理要求

(a) ‘\n’是换行符 需要删除
(b) 标点符号需要处理
[’.’, ‘,’, ‘!’, ‘?’, ‘;’, ‘’’, ‘"’, ‘/’, ‘-’, ‘(’, ‘)’]

© 阿拉伯数字需要处理
[‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘0’]
(d) 注意大小写 一些单词由于在句首,首字母大写了。需要把所有的单词转成小写
‘String’.lower()
(e) 高分项
通过自己查找资料学习正则表达式,并在代码中使用(re模块)

可参考资料:https://docs.python.org/3.7/library/re.html

代码实现如图

def get_artical(artical_path):
    with open(artical_path) as fr:
        data = fr.read()
    return data

# get_artical()为自定义函数,可用于读取指定位置的试题内容。
txt=get_artical('./artical.txt')
for k in set([i for i in txt if i.isalpha() == False]): #只留下字符
    txt = txt.replace(k,' ') #其他字符均认为是单词分隔符
txt=txt.rstrip(' ').lower().split() #去掉空格,全部变小写,变为列表
#print(txt)

dic = {}
for word in txt:
    if word not in dic:
        dic[word] = 1
    else:
        dic[word] = dic[word] + 1
swd = sorted(dic.items(),key=lambda v:v[1],reverse=True)
print(swd)

部分输出结果:

(‘the’, 169), (‘to’, 95), (‘a’, 87), (‘of’, 82), (‘and’, 74), (‘in’, 61), (‘is’, 34), (‘antarctic’, 33), (‘they’, 30), (‘their’, 28), (‘are’, 25), (‘on’, 25), (‘what’, 25), (‘that’, 25), (‘s’, 23), (‘for’, 22), (‘d’, 21), (‘b’, 20), (‘c’, 20), (‘fishing’, 20), (‘with’, 19), (‘it’, 19), (‘be’, 18), (‘as’, 18), (‘penguins’, 18), (‘you’, 16), (‘students’, 15), (‘king’, 15), (‘krill’, 14), (‘we’, 13), (‘about’, 13), (‘can’, 13), (‘one’, 12), (‘have’, 12), (‘will’, 12), (‘from’, 12), (‘passage’, 11), (‘do’, 11), (‘t’, 11), (‘them’, 11), (‘change’, 11), (‘breeding’, 11), (‘was’, 10), (‘new’, 10), (‘may’, 10), (‘not’, 10), (‘many’, 10), (‘grounds’, 10)]

二.继承与多态
数据格式如下:

stu5.txt 特长同学,2020-10-5,20,‘男’,180,87,98,77,76,92,58,-76,84,69,-47
stu6.txt 特长同学,2020-10-6,20,‘女’,230,76,48,82,88,92,58,-91,84,69,-68

以上两个txt文档在work路径下可以找到。

定义Spostudent、Artstudent为Student的子类,在子类的属性里面新增了spe为特长分数。Spostudent包括的top3方法返回的是最低的3个得分(可重复),Artstudent包括top3方法返回的是最高的3个得分(可重复),最后使用多态的方式输出2个特长同学的姓名、生日、年龄、性别、分数、特长分。

代码如下:

class Spostudent(Student):
    def __init__(self,name,dob,age,gender,score,spe):
        Student.__init__(self,name,dob,age,gender,score)
        self.spe = spe
    
    def top3(self):
        return sorted(set([self.sanitize(t) for t in self.score]),reverse=False)[0:3]
    def sanitize(self,score_string):
        if '-' in score_string:
            score_string = score_string.replace('-', '')
        return int(score_string)

class Artstudent(Student):
    def __init__(self,name,dob,age,gender,score,spe):
        Student.__init__(self,name,dob,age,gender,score)
        self.spe = spe
    
    def top3(self):
        return sorted(set([self.sanitize(t) for t in self.score]),reverse=True)[0:3]
    def sanitize(self,score_string):
        if '-' in score_string:
            score_string = score_string.replace('-', '')
        return int(score_string)

def show(filename,student):
    data = get_coach_data(filename)
    name = data.pop(0)
    dob = data.pop(0)
    age = data.pop(0)
    gender = data.pop(0)
    spe = data.pop(0)

    if student == 'Spostudent':
        spostudent = Spostudent(name, dob, age, gender, data, spe)
        print('姓名:%s  生日:%s  年龄:%s  性别:%s  分数:%s  特长分:%s'%(spostudent.name,spostudent.dob,spostudent.age,spostudent.gender,spostudent.top3(),spostudent.spe))
    elif student == 'Artstudent':
        artstudent = Artstudent(name, dob, age, gender, data, spe)
        print('姓名:%s  生日:%s  年龄:%s  性别:%s  分数:%s  特长分:%s'%(artstudent.name,artstudent.dob,artstudent.age,artstudent.gender,artstudent.top3(),artstudent.spe))


show('work/stu5.txt','Spostudent')
show('work/stu6.txt','Artstudent')

输出结果:

姓名:特长同学 生日:2020-10-5 年龄:20 性别:‘男’ 分数:[56, 58, 69] 特长分:180
姓名:特长同学 生日:2020-10-6 年龄:20 性别:‘女’ 分数:[92, 91, 84] 特长分:230

继承与多态的使用可以大大简化代码量,提高工作效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值