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

时间:2018-07-06 06:21:05

标签: python-3.x oop object methods constructor

为什么当我尝试运行它时为什么不能在get_average()方法中添加“整数和等级”?我知道可能必须这样做,因为它们是两种不同的类型,但是我只是想知道如何解决它。

关于我的问题,我最后只是想知道如何修正我的代码,因此我可以将该人的成绩添加到列表中,然后对他们的成绩进行平均,或者显示出来,而我却在努力做到这一点。

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())

1 个答案:

答案 0 :(得分:0)

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

您需要传递grade.score可以访问的成绩的int值

同样,您需要更改def __repr__(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())