从这道题来看:
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
定义初始化方法之后,程序会在一运行就默认调动这些方法,让实例对象拥有这些属性,并根据在创建对象时的传入的参数,定义各属性的值。
定义的空列表用以存储各学生的成绩,方便获取最低、高成绩以及平均分。
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下方的代码。
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__方法会自动调用,将这些属性赋值给各实例对象。
print('学生信息如下:')
print(stu1.get_information())
print(stu2.get_information())
print(stu3.get_information())
print(stu4.get_information())
print(stu5.get_information())
将五个实例对象打点调用显示信息方法,并将他们的成绩加入列表。
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()函数(关于此函数可参考笔者对于高阶函数的介绍)先对列表进行累计和运算,再计算平均分,你可以对比两种方法的效率。
我们在写代码的时候,不光要会写,还要能够高效率低冗余的写出来,这样可以提高我们对于代码学习的掌握和运用以及编程的效率和代码的简洁性。
看到这个题目你会用什么方法呢,如果你有更好的方法,一定要分享给我哦~