以下代码中,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}')
请通过编程,找出以上 students
列表中名字相同的所有人,并将重名学生的全部信息分组打印出来,不同分组(名字不同)之间用空行分割。要求打印信息的样式如下(不要求严格对齐):
有 2 个名字为“李四”的学生:
2002 李四 78.0
2006 李四 84.0
有 2 个名字为“白冰冰”的学生:
2004 白冰冰 87.0
2008 白冰冰 92.3
请通过编程,为以上 students
列表中的每个学生实例附加一个名称为 rank
的实例变量,其值为一个正整数,即为该学生在所有学生中成绩的排名。最后按照成绩的升序打印所有学生的信息。要求打印信息的样式如下(不要求严格对齐):
学号 姓名 成绩 排名
2008 白冰冰 92.3 1
2001 张三 88.5 2
...
注意:此题要求实现的功能都是在假设有大量学生时能通过程序进行一些自动化的管理和统计功能,一定要使用循环语句实现,不可通过手工进行统计信息而把代码写死。