'''设计一个学生类:属性:姓名、学号、年龄、成绩,'''
'''设计一个班级类:属性:班级代号、所有学生'''
'''要求:实现向班级添加学生、删除学生、学生排序(指定条件)、查询学生信息(姓名、学号等)'''
class Student:
def __init__(self, name, school_num, age, score):
# 定义属性姓名、学号、年龄、成绩
self.name = name
self.school_num = school_num
self.age = age
self.score = score
self.student = {"name": name, "school_num": school_num, "age": age, "score": score}
class Class:
def __init__(self, class_num, students):
# 初始化 班级属性
self.class_num = class_num
self.students = students
# print(self.students)
def add_student(self, student):
# 将Student类里的信息以列表的形式存储到Class类里面
self.students.append(student.student)
# print(self.students[0])
def del_student(self, student):
# 便利列表找到匹配的学生然后删除
"""for i in range(len(self.students)):
if self.students[i] == student.student:
del self.students[i]
"""
# 或者使用remove直接从列表中删除
self.students.remove(student.student)
def sort_stu(self, key):
# 排序
self.students.sort(key=lambda a: a[key])
def show(self):
for i in range(len(self.students)):
print(self.students[i])
def query(self, key, value):
for i in range(len(self.students)):
if self.students[i][key] == value:
print(self.students[i])
s1 = Student("n1", 1, 13, 89)
s2 = Student("n2", 2, 14, 90)
c1 = Class("c1", [])
c1.add_student(s1)
c1.show()
c1.del_student(s1)
c1.show()
c1.add_student(s2)
c1.add_student(s1)
c1.sort_stu("score")
c1.query("school_num", 1)
方法二:
class Student:
def __init__(self, name, num, age, score):
self.name = name
self.num = num
self.age = age
self.score = score
def __str__(self):
return 'name:{},num:{},age:{},score:{}'.format(self.name, self.num, self.age, self.score)
# 班级类
class Class:
def __init__(self, name):
self.name = name
self.stu_list = []
self.stu_dict = {}
# 添加学生
def add_stu(self, stu):
self.stu_list.append(stu)
self.stu_dict[stu.name] = stu
# 删除学生
def del_stu(self, stu):
self.stu_list.remove(stu)
self.stu_dict.pop(stu.name)
# 查询学生信息
def search_by_name(self, name):
return self.stu_dict.get(name)
# 排序
def sort_by(self, key=None, reverse=False):
self.stu_list.sort(key=key, reverse=reverse)
# 展示学生信息
def show_stu(self):
for s in self.stu_list:
print(s)
from random import randint, uniform
# 创建班级
c = Class('ZZ-JY-PY1804')
for i in range(10):
name = 'stu' + str(i+1)
num = i+100
age = randint(20, 30)
score = uniform(0, 100)
# 创建学生
s = Student(name, num, age, score)
# 添加学生
c.add_stu(s)
# 排序
c.sort_by(key=lambda s: s.score, reverse=True)
c.show_stu()
结果:name:stu3,num:102,age:22,score:95.35498927460175
name:stu1,num:100,age:27,score:86.71827270053991
name:stu7,num:106,age:20,score:82.57020984238078
name:stu6,num:105,age:20,score:74.8175599855444
name:stu5,num:104,age:27,score:68.95524475284302
name:stu4,num:103,age:23,score:62.47905815211614
name:stu10,num:109,age:29,score:53.41054734341052
name:stu8,num:107,age:28,score:43.26452706210031
name:stu9,num:108,age:23,score:36.46406569534819
name:stu2,num:101,age:30,score:16.36399277241821