数据如下:
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个分数。
第一题的输出结果如下,供参考:
def get_coach_data(filename):
with open(filename) as f:
line = f.readline()
return line.strip().split(',')
class Student:
def __init__(self,a_name,a_dob,a_age, gender,a_scores=[]):
self.name = a_name
self.dob = a_dob
self.age=a_age
self.gender=gender
self.scores=a_scores
def top3(self):
return sorted(set([self.sanitize(t) for t in self.scores]))[0:3]
def sanitize(self,scores_string):
scores_string= scores_string.strip('-')
target = int(scores_string)
return (target)
stu1 = get_coach_data('work/stu1.txt')
stu1 = Student(stu1.pop(0),stu1.pop(0),stu1.pop(0),stu1.pop(0),stu1)
stu2 = get_coach_data('work/stu2.txt')
stu2 = Student(stu2.pop(0),stu2.pop(0),stu2.pop(0),stu2.pop(0),stu2)
stu3 = get_coach_data('work/stu3.txt')
stu3 = Student(stu3.pop(0),stu3.pop(0),stu3.pop(0),stu3.pop(0),stu3)
stu4 = get_coach_data('work/stu4.txt')
stu4 = Student(stu4.pop(0),stu4.pop(0),stu4.pop(0),stu4.pop(0),stu4)
stu_lis=[stu1, stu2, stu3, stu4]
for stu in stu_lis:
print("姓名: {} 生日:{} 年龄: {} 性别:{} 分数: {}".format(stu.name, stu.dob, stu.age, stu.gender, stu.top3()))
姓名: 孙同学 生日:2020-5-21 年龄: 20 性别:'男' 分数: [56, 58, 69]
姓名: 赵同学 生日:2020-11-3 年龄: 24 性别:'女' 分数: [57, 65, 68]
姓名: 王同学 生日:2021-8-7 年龄: 25 性别:'男' 分数: [47, 65, 69]
姓名: 李同学 生日:2021-8-10 年龄: 29 性别:'男' 分数: [54, 68, 71]
数据格式如下:
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,a_name,a_dob,a_age, gender,techang,a_scores=[]):
Student.__init__(self,a_name,a_dob,a_age, gender,a_scores)
self.techang=techang
class Artstudent(Student):
def __init__(self,a_name,a_dob,a_age, gender,techang,a_scores=[]):
Student.__init__(self,a_name,a_dob,a_age, gender,a_scores)
self.techang=techang
def top3(self):
target=[self.sanitize(t) for t in self.scores]
target.sort(reverse=True)
return target[0:3]
def sanitize(self,scores_string):
scores_string= scores_string.strip('-')
target = int(scores_string)
return (target)
stu5 = get_coach_data('work/stu5.txt')
stu5 = Spostudent(stu5.pop(0),stu5.pop(0),stu5.pop(0),stu5.pop(0),stu5.pop(0),stu5)
stu6 = get_coach_data('work/stu6.txt')
stu6 = Artstudent(stu6.pop(0),stu6.pop(0),stu6.pop(0),stu6.pop(0),stu6.pop(0),stu6)
stu_lis=[stu5, stu6]
for stu in stu_lis:
print("姓名: {} 生日: {} 年龄: {} 性别:{} 分数: {} 特长分:{}".format(stu.name, stu.dob, stu.age, stu.gender, stu.top3(), stu.techang ))
姓名: 特长同学 生日: 2020-10-5 年龄: 20 性别:'男' 分数: [56, 58, 69] 特长分:180
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
26 stu_lis=[stu5, stu6]
27 for stu in stu_lis:
---> 28 print("姓名: {} 生日: {} 年龄: {} 性别:{} 分数: {} 特长分:{}".format(stu.name, stu.dob, stu.age, stu.gender, stu.top3(), stu.techang ))
in top3(self)
9 self.techang=techang
10 def top3(self):
---> 11 target=set([self.sanitize(t) for t in self.scores])[0:3]
12 target.sort(reverse = True)
13 return
TypeError: 'set' object is not subscriptable
请点击此处查看本环境基本用法.
Please click here for more detailed instructions.