Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用我在类的构造函数中创建的列表?_Python 3.x_Oop_Object_Methods_Constructor - Fatal编程技术网

Python 3.x 使用我在类的构造函数中创建的列表?

Python 3.x 使用我在类的构造函数中创建的列表?,python-3.x,oop,object,methods,constructor,Python 3.x,Oop,Object,Methods,Constructor,为什么在尝试运行get_average()方法时,它会说我不能在其中添加“int和grade”?我知道这可能是必须的,因为它们是两种不同的类型,但我只是想知道如何修复它 最后,我的问题只是想知道如何修复我的代码,这样我就可以将这个人的分数添加到一个列表中,然后对其进行平均或显示,我正在努力解决如何做到这一点 class Student: def __init__(self, name, year): self.name = name self.year =

为什么在尝试运行get_average()方法时,它会说我不能在其中添加“int和grade”?我知道这可能是必须的,因为它们是两种不同的类型,但我只是想知道如何修复它

最后,我的问题只是想知道如何修复我的代码,这样我就可以将这个人的分数添加到一个列表中,然后对其进行平均或显示,我正在努力解决如何做到这一点

class Student:
    def __init__(self, name, year):
        self.name = name
        self.year = year
        self.grades = []

    def add_grade(self, grade):
        if type(grade) == Grade:
            self.grades.append(grade)
            return self.grades

    def get_average(self):
        gradebook = self.grades
        total = 0
        for grade in gradebook:
            total += int(grade)
        avg = total / len(gradebook)
        return avg

    def get_name(self):
        return self.name

    def __repr__(self):
        return "{p} has these grades: {g}".format(p=self.name, g=self.grades)

# student1 = Student()
# student1.attendance = {
#   "11/1/98": True,
#   "11/2/98": False 
# }

roger = Student("Roger van der Weyden", 10)
sandro = Student("Sandro Botticelli", 12)
pieter = Student("Pieter Bruegel the Elder", 8)

class Grade:
    minimum_passing = 65

    def __init__(self, score):
        self.score = score

    def is_passing(self):
        if self.score > self.minimum_passing:
            return "{p} is passing with a grade of {g}".format(p=pieter.get_name(), g=self.score)

# Checking for grades and averages
pieter.add_grade(Grade(100))
#print(pieter.get_average())
print(pieter)

# Tells you if the dude is passing
# roger_grade = Grade(100)
# print(roger_grade.is_passing())

在您的学生班级中,您有一个包含
Grade
对象的成绩列表。 运行
get_average()
时,它会尝试执行以下
total+=int(grade)
。这会失败,因为您正试图将对象强制转换为int

您需要传入分数的int值,该值可通过
grade.score

同样,您需要更改
def\uuu repr\uuuu(self):
以打印出实际的成绩,而不是成绩对象的地址

这是固定代码

class Student:
    def __init__(self, name, year):
        self.name = name
        self.year = year
        self.grades = []

    def add_grade(self, grade):
        if type(grade) == Grade:
            self.grades.append(grade)
            return self.grades

    def get_average(self):
        gradebook = self.grades
        total = 0
        for grade in gradebook:
            total += int(grade.score)
        avg = total / len(gradebook)
        return avg

    def get_name(self):
        return self.name

    def __repr__(self):
        return "{p} has these grades: {g}".format(p=self.name, g=[sc.score for sc in self.grades])

# student1 = Student()
# student1.attendance = {
#   "11/1/98": True,
#   "11/2/98": False 
# }

roger = Student("Roger van der Weyden", 10)
sandro = Student("Sandro Botticelli", 12)
pieter = Student("Pieter Bruegel the Elder", 8)

class Grade:
    minimum_passing = 65

    def __init__(self, score):
        self.score = score

    def is_passing(self):
        if self.score > self.minimum_passing:
            return "{p} is passing with a grade of {g}".format(p=pieter.get_name(), g=self.score)

# Checking for grades and averages
pieter.add_grade(Grade(100))
pieter.add_grade(Grade(0))


print(pieter.get_average())
print(pieter)

# Tells you if the dude is passing
# roger_grade = Grade(100)
# print(roger_grade.is_passing())