问题描述
我尝试过一种方法,可以显示所有学生的整体平均水平。如您在代码中所见,我尝试创建一个空列表(类变量)来存储每个学生的平均成绩。在我的 init 方法中,我描述了每个加入他们的新学生都将其平均成绩保存在“成绩单”列表中,以便以后可以定义一种方法,该方法可以为我提供所有学生的总体平均成绩。为了能够做到这一点,我必须将所有年级分数的总和除以学生人数。但是,它在我的程序中不起作用。我不确定要使用哪种方法,是否可以使用staticmethod来做到这一点,或者它是否可以与常规方法一起工作。我已经定义了一种方法“ mark_avarage_students_all”来执行上述划分。但是,由于缺少自变量,执行此方法给我一个错误。有人知道我最终将如何为所有学生输出平均学分?预先感谢
这是我的代码:
class Students:
#class variables
num_of_students = 0
#use later to add up all marks from all student
marklist = []
def __init__(self,first,last,age,catalognumber,markaverage):
self.first = first
self.last = last
self.age = age
self.catalognumber = catalognumber
self.markaverage = markaverage
self.averageall = Students.marklist.append(self.markaverage)
Students.num_of_students += 1
def std_description(self):
print('My Name is {} {},I am {} years old.'.format(self.first,self.last,self.age))
print('My Catalog Number is {} and I have a Mark-average of {}'.format(self.catalognumber,self.markaverage))
print("")
@classmethod
def convert_str(cls,str_std):
first,markaverage = str_std.split('-')
return cls(first,markaverage)
#calculate the mark average of all students --> sum(marklist) / sum(num_of_students)
def mark_average_students_all(self):
return sum(Students.marklist) / Students.num_of_students
if __name__ == '__main__':
std_1 = 'Jill-Janson-18-20-1.6'
convert_std_1 = Students.convert_str(std_1)
convert_std_1.std_description()
Students.mark_average_students_all()
解决方法
您将其定义为实例方法,但从类中调用了它。因此,该调用没有隐式plt.scatter(X,results.predict())
参数。从实例中调用它,或更改定义以匹配您的用法。更好的选择是匹配用法:只需将其声明为self
并转储@classmethod
参数(您不用)。