上机实验(面向对象程序设计)

  1. 以下代码中,Student 为存储每个学生信息的类,score_table 是以多行文本形式给出的班级期末平均成绩列表:

    class Student:
        def __init__(self, name, id_number, avg_score):
            self.name = name
            self.id_number = id_number
            self.avg_score = avg_score
    
    
    score_table = '''学号,姓名,成绩
    2001,张三,88.5
    2002,李四,78.0
    2003,王老五,67.2
    2004,白冰冰,87.0
    2005,赵晓静,78.0
    2006,李四,84.0
    2007,张诗萌,79.9
    2008,白冰冰,92.3'''

    请编写一个函数 parse(score_table),实现将 score_table 中的文本解析为 Student 的实例的列表并返回。请在以下代码的基础上编写:

    def parse(score_table):
        students = []  # 存储学生信息的列表
        ...  # TODO: 请在此解析 score_table,并将有效信息追加到 students 中
    
        return students
    
    
    students = parse(score_table)
    print('学号\t姓名\t平均成绩')
    for student in students:
        print(f'{student.id_number}\t{student.name}\t{student.avg_score}')
  2. 请通过编程,找出以上 students 列表中名字相同的所有人,并将重名学生的全部信息分组打印出来,不同分组(名字不同)之间用空行分割。要求打印信息的样式如下(不要求严格对齐):

    有 2 个名字为“李四”的学生:
    2002    李四    78.0
    2006    李四    84.0
    
    有 2 个名字为“白冰冰”的学生:
    2004    白冰冰    87.0
    2008    白冰冰    92.3
  3. 请通过编程,为以上 students 列表中的每个学生实例附加一个名称为 rank 的实例变量,其值为一个正整数,即为该学生在所有学生中成绩的排名。最后按照成绩的升序打印所有学生的信息。要求打印信息的样式如下(不要求严格对齐):

    学号     姓名    成绩    排名
    2008    白冰冰   92.3    1
    2001    张三     88.5    2
    ...

注意:此题要求实现的功能都是在假设有大量学生时能通过程序进行一些自动化的管理和统计功能,一定要使用循环语句实现,不可通过手工进行统计信息而把代码写死。