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)