为什么我得到 ZeroDivisionError 以及如何修复它?

问题描述

刚开始使用 Python 中的 OOP,使用了“Tech with Tim”的一组教程 为学生数据库创建了几个类 - 这是相关代码

class Student:
    def __init__(self,name,age,grade):
        self.name = name
        self.age = age
        self.grade = grade

    def get_grade(self):
        return self.grade

 def  get_avarage_grade(self):
    value = 0
    for student in self.students:
        value += student.get_grade()
    return value / len(self.students) # here

加号

class Course:
def __init__(self,max_students):
    self.name = name
    self.max_students = max_students
    self.students = []

我认为问题出在第二个函数中。 为什么我会收到 ZeroDivisionError 以及如何修复它?

解决方法

当 self.students 为空列表时会出现问题:[ ]。 len(self.students) 然后将返回 0。当您尝试像您一样计算平均值时,这将产生错误。您需要决定在 get_avarage_grade() 方法中要返回什么,以防 self.students 列表为空,例如一些 default_value。

def  get_avarage_grade(self):
  default_value = -1
  if len(self.students) == 0:
    return default_value
  value = 0
  for student in self.students:
    value += student.get_grade()
  return value / len(self.students) here
,

先检查students是否为空,如果students大于0,再进行运算。

def  get_avarage_grade(self):
    value = 0
    for student in self.students:
        value += student.get_grade()
    if len(self.students) > 0:
        return value / len(self.students)
    return value
,

这里:

return value / len(self.students) 

您的类需要一个列表,每次执行此操作时其值都会增加一:

value += student.get_grade() 

与不同的学生...