【题目】定义学生类,显示五个学生的信息(学号、姓名、性别、年龄、成绩)。并输出他们中最低和最高的成绩,以及计算他们的平均分。

解题思路

从这道题来看:

  1. 需要在类里用__init__方法,定义初始化属性,即括号内的五个属性。
  2. 定义方法,实现显示各学生信息的功能。
  3. 创建对象,传入参数。
  4. 调用方法,显示各学生信息。
  5. 输出最低、最高成绩,计算平均成绩。

Step 1

list1 = []


class Student:
    def __init__(self, No, name, sex, age, java):
        self.No = No
        self.name = name
        self.sex = sex
        self.age = age
        self.java = java

        定义初始化方法之后,程序会在一运行就默认调动这些方法,让实例对象拥有这些属性,并根据在创建对象时的传入的参数,定义各属性的值。

        定义的空列表用以存储各学生的成绩,方便获取最低、高成绩以及平均分。

Step 2

    def get_information(self, *args):
        list1.append(self.java)
        return self.No, self.name, self.sex, self.age, self.java

        这里要实现将学生的信息输出,最直接的方法就是用return返回数据(按照上面代码最后一行的形式即可返回多个数据),只要一调用方法就可以返回各学生对象的信息。

        这里返回的都是我们前面定义的属性参数。需要让方法具备显示这些属性的功能,就要将它们作为参数传入方法内。此时我们可以用到不定长参数的传递方法,只要写一个*args变量即可,不用像在__init__方法一样,将它们挨个打上去哦。

        因为每创建一个学生对象就要多一个计算的分值,为了节省代码,可以直接在显示的方法里将分数加入定义的空列表即可,这样就不用再定义另外的方法来专门对成绩做出处理,而即使定义了针对于成绩的方法,还要创建新的对象来调用方法显示成绩,无形之中增加了不少的代码量。

        这里要注意的一点是:一定要把向列表增加数据的代码放在return行的上面,否则你将永远只能得到一个空列表。因为执行完return,程序会直接跳出方法,不再执行return下方的代码。

Step 3

stu1 = Student(1, '甲', '男', 18, 83)
stu2 = Student(2, '乙', '女', 19, 92)
stu3 = Student(3, '丙', '男', 18, 86)
stu4 = Student(4, '丁', '女', 17, 95)
stu5 = Student(5, '五', '男', 20, 88)

        创建五个学生对象,将他们的各属性作为参数传入,定义的__init__方法会自动调用,将这些属性赋值给各实例对象。

Step 4 

print('学生信息如下:')
print(stu1.get_information())
print(stu2.get_information())
print(stu3.get_information())
print(stu4.get_information())
print(stu5.get_information())

        将五个实例对象打点调用显示信息方法,并将他们的成绩加入列表。 

Step 5

print(f'{len(list1)}个学生中成绩最高为{max(list1)}')
print(f'{len(list1)}个学生中成绩最低为{min(list1)}')
print(f'{len(list1)}个学生中平均成绩为{sum(list1)/len(list1)}')

        可能大家会想到用for循环或者高阶函数来得到最高最低分数以及平均分。

        其实直接用min()函数(获取一个数列的最低值) 和max()函数(获取一个数列的最高值)这两个函数可以非常直接又简洁的帮我们获取到列表中的最高最低分。无论上面提到的循环或者高阶函数,它们都需要先对序列进行一定的处理,才能得到符合条件的分值,然后再输出。这两个方法都很难用一行代码就实现处理和输出,无形之中增加了代码量。

        平均分的计算我们可以用sum()函数(获取几个数据或一个序列的总和)和len()函数(获取一个序列中元素的个数),通过这两个函数我们也可以一行实现处理和输出。当然也可以用reduce()函数(关于此函数可参考笔者对于高阶函数的介绍)先对列表进行累计和运算,再计算平均分,你可以对比两种方法的效率。


结语

        我们在写代码的时候,不光要会写,还要能够高效率低冗余的写出来,这样可以提高我们对于代码学习的掌握和运用以及编程的效率和代码的简洁性。

        看到这个题目你会用什么方法呢,如果你有更好的方法,一定要分享给我哦~

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值