python 中类的学习

'''设计一个学生类:属性:姓名、学号、年龄、成绩,'''
'''设计一个班级类:属性:班级代号、所有学生'''
'''要求:实现向班级添加学生、删除学生、学生排序(指定条件)、查询学生信息(姓名、学号等)'''


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

 

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值