面向对象第三次作业

第一题(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个分数。

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

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]

第二题(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,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.

你可能感兴趣的:(笔记,python)