【问题标题】:Using a list I created within the constructor of a class?使用我在类的构造函数中创建的列表?
【发布时间】:2018-12-14 16:38:21
【问题描述】:

为什么当我尝试运行 get_average() 方法时,它说我不能在 get_average() 方法中添加“int and 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())

【问题讨论】:

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


    【解决方案1】:

    在您的学生班级中,您有一个包含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())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多