Используя список, который я создал в конструкторе класса? - PullRequest
0 голосов
/ 06 июля 2018

Почему говорится, что я не могу добавить "int and grade" в метод 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 голосов
/ 06 июля 2018

В вашем классе Student у вас есть список оценок, которые содержат Grade объект. Когда вы запускаете get_average(), он пытается сделать следующее total += int(grade). Это не удалось, потому что вы пытаетесь привести объект к int.

Вам необходимо передать значение int оценки, к которой можно получить доступ grade.score

Точно так же вам нужно изменить 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...