百度飞桨领航团零基础Python速成营——学习心得

python的学习只是入门,要想深入学习,还得勤加练习,虽然只有 一周的时间,但是结合作业与视频,还是学到了很多知识,结合自身之前学的C语言,很大程度上学习起来Python并不是很费力~接下来,重点分享最后一次的大作业!!

第一题(30分)

数据如下:

stu1.txt 孙同学,2020-5-21,20,‘男’,77,56,77,76,92,58,-91,84,69,-91
stu2.txt 赵同学,2020-11-3,24,‘女’,65,68,72,95,-81,71,86,91,57,91
stu3.txt 王同学,2021-8-7,25,‘男’,87,78,90,-76,88,47,100,65,69,100
stu4.txt 李同学,2021-8-10,29,‘男’,92,54,85,71,-91,68,77,68,95,95
以上四个txt文档在work路径下可以找到。

定义Student类,包括name、dob、age、gender和score属性,包括top3方法用来返回学生的最大的3个成绩(可重复)、sanitize方法用来将负的分数变为正的分数,负的分数可能是输入错误。声明stu_list对象组数用于存储所有的学生对象。最后输出所有的学生信息包括姓名、生日、年龄、性别、最高的3个分数。

第一题的输出结果如下,供参考:

在这里插入图片描述

class Student:
    def __init__(self,a_name,a_dob,a_age,a_gender,a_score=[]):
        self.name = a_name
        self.dob = a_dob
        self.age = a_age
        self.gender = a_gender
        self.score = a_score
    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 get_coach_data(filename):
    with open(filename) as f:
        line = f.readline()
    return line.strip().split(',')

def show(filename):
    data = get_coach_data(filename)
    name = data.pop(0)
    dob = data.pop(0)
    age = data.pop(0)
    gender = data.pop(0)
    student = Student(name, dob, age, gender, data)
    print('姓名:%s  生日:%s  年龄:%s  性别:%s  分数:%s'%(student.name,student.dob,student.age,student.gender,student.top3()))


show('work/stu1.txt')
show('work/stu2.txt')
show('work/stu3.txt')
show('work/stu4.txt')

注意:
这里题目要求定义声明stu_list对象组数用于存储所有的学生对象,结果没声明,直接被扣分了(尴尬!)
结果应该把最后的改一下,即:

# 列表初始化
pathList = ['work/stu1.txt', 'work/stu2.txt', 'work/stu3.txt', 'work/stu4.txt']
stu_list = []
# 读入创建对象
for i in pathList:
    res = readFile(i)
    stu_list.append(Student(res[0],res[1],res[2],res[3],[int(i) for i in res[4:]]))
for i in stu_list:
    print(i)

第二题(30分)

数据格式如下:

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,spe,score=[]):
        self.spe = spe
        Student.__init__(self,name,dob,age,gender,score)
        
    def __str__(self):
        return "姓名:%s  生日:%s 年龄: %s 性别: %s 分数:%s 特长分:%s"%(self.name,self.dob,self.age,self.gender,self.top3(), self.spe)
    # 最低的3个得分
    def top3(self):
        return sorted([self.sanitize(s) for s in self.score])[0:3]

class Artstudent(Student):
    def __init__(self,name,dob,age,gender,spe,score=[]):
        self.spe = spe
        Student.__init__(self,name,dob,age,gender,score)
        
    def __str__(self):
        return "姓名:%s  生日:%s 年龄: %s 性别: %s 分数:%s 特长分:%s"%(self.name,self.dob,self.age,self.gender,self.top3(), self.spe)
    # 最高的3个得分
    def top3(self):
        return sorted([self.sanitize(s) for s in self.score])[-3:]
spo = 'work/stu5.txt'
art = 'work/stu6.txt'

# 读入创建对象
res = readFile(spo)
spo = Spostudent(res[0],res[1],res[2],res[3],res[4],[int(i) for i in res[5:]])
print(spo)
res = readFile(art)
art = Artstudent(res[0],res[1],res[2],res[3],res[4],[int(i) for i in res[5:]])
print(art)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值