Python:33创建Student、Grade类,查看班级学生、不及格学生、指定学生信息及学生成绩降序排序

问题分析:

–1-- 分析:

  • 两个类:(1) 学生类:Student   (2)班级类:Grade
  • 属性:(1)学生类:学号 ,姓名,年龄,性别,成绩    (2)班级类:班级名称,班级中的学生【列表存储学生】

–2-- 问题:

  1. 查看该班级中的全部学生信息
  2. 查看指定学号的学生信息
  3. 查看班级中成绩不及格的学生信息
  4. 将班级中的学生按照成绩降序排序

–3-- 实现功能:

1.查看该班级中的全部学生信息  

g = Grade('二班',[s1,s2,s3,s4,s5])
g.show_all()

运行结果:

学号:1,姓名:zhangsan,年龄:18,性别:female,分数:90
学号:2,姓名:kisi,年龄:21,性别:male,分数:77
学号:3,姓名:tom,年龄:16,性别:male,分数:91
学号:4,姓名:anan,年龄:12,性别:female,分数:56
学号:5,姓名:wangwu,年龄:19,性别:female,分数:80

2. 查看指定学号的学生信息

print(g.get_student_by_number(1))
print(g.get_student_by_number(2))

 运行结果:

学号:1,姓名:zhangsan,年龄:18,性别:female,分数:90
学号:2,姓名:kisi,年龄:21,性别:male,分数:77

3. 查看班级中成绩不及格的学生信息

g.failed_students()

 运行结果:

学号:4,姓名:anan,年龄:12,性别:female,分数:56

4. 将班级中的学生按照成绩降序排序

g.order_students()
g.show_all()

 运行结果:

学号:3,姓名:tom,年龄:16,性别:male,分数:91
学号:1,姓名:zhangsan,年龄:18,性别:female,分数:90
学号:5,姓名:wangwu,年龄:19,性别:female,分数:80
学号:2,姓名:kisi,年龄:21,性别:male,分数:77
学号:4,姓名:anan,年龄:12,性别:female,分数:56

 

完整代码实现:

class Student(object):
    def __init__(self, number, name, age, gender, score):
        self.number = number
        self.name = name
        self.age = age
        self.gender = gender
        self.score = score
    def __str__(self):
        return '学号:{},姓名:{},年龄:{},性别:{},分数:{}'.format(self.number,
                   self.name,self.age,self.gender,self.score)
class Grade(object):
    def __init__(self,name,students):
        self.name = name
        self.students =students
    def show_all(self):
        for student in self.students:
            print(student)
    def get_student_by_number(self,n):
        for s in self.students:
            if s.number == n:
                return s
        else:
            return '用户未找到'
    def failed_students(self):
        result = filter(lambda student:student.score < 60,self.students)
        for x in result:
            print(x)
    def order_students(self):
        self.students.sort( key =lambda s:s.score,reverse = True) #直接修改self.students
        # sorted(self.students,key=lambda s:s.score,reverse=True)

s1 = Student(1,'zhangsan',18,'female',90)
s2 = Student(2,'kisi',21,'male',77)
s3 = Student(3,'tom',16,'male',91)
s4 = Student(4,'anan',12,'female',56)
s5 = Student(5,'wangwu',19,'female',80)

g = Grade('二班',[s1,s2,s3,s4,s5])
# print(g.get_student_by_number(1))
# print(g.get_student_by_number(2))
# g.show_all()
# g.failed_students()
g.order_students()
g.show_all()
# x = g.order_students()
# for student in x:
#     print(student)

 

终于完成啦,现在是2015/10/25-00:06啦,有点困明天还要早起,恩~今晚就写到这里吧。希望这篇文章也可以帮助到你,Thanks♪(・ω・)ノ亲~的查看与支持哟,欢迎收藏+关注我好嘛·~(^U^)ノ~YO晚安世界!

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个示例程序,可以实现您的要求: ```python class Student: def __init__(self, name, grades): self.name = name self.grades = grades self.average = sum(self.grades) / len(self.grades) def __repr__(self): return f"{self.name}: {self.average:.2f}" students = [ Student("Alice", [90, 85, 95]), Student("Bob", [80, 75, 70]), Student("Charlie", [95, 90, 100]), Student("David", [60, 65, 55]), Student("Eve", [85, 90, 80]), ] # 平均分最高的学生 highest_average_student = max(students, key=lambda student: student.average) print(f"平均分最高的学生:{highest_average_student.name},平均分:{highest_average_student.average:.2f}") # 不及格学生及人数 fail_students = [student for student in students if any(grade < 60 for grade in student.grades)] print(f"不及格学生人数:{len(fail_students)}") for student in fail_students: print(f"{student.name},平均分:{student.average:.2f}") # 平均分在80分以上的学生及人数 good_students = [student for student in students if all(grade >= 80 for grade in student.grades)] print(f"平均分在80分以上的学生人数:{len(good_students)}") for student in good_students: print(f"{student.name},平均分:{student.average:.2f}") ``` 这个程序,我们同样定义了一个 `Student` 来存储学生信息,包括姓名、分数和平均分。然后我们创建了一个学生列表,并分别实现了三个要求: - 使用 `max` 函数找出平均分最高的学生,并打印出其姓名和平均分。 - 使用列表推导式和 `any` 函数找出不及格学生,并打印出其姓名和平均分,以及不及格学生的总人数。 - 使用列表推导式和 `all` 函数找出平均分在80分以上的学生,并打印出其姓名和平均分,以及符合条件的学生的总人数。 注意,在程序,我们使用了 `:.2f` 格式化字符串,以保留小数点后两位。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

濯一一

你的鼓励:我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值