为什么当我尝试运行它时为什么不能在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())
答案 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())