Python中使用类和函数计算最终成绩

85 阅读2分钟

我们正在开发一个程序来计算学生的分数,该程序将根据学生在家庭作业、测验和考试中的表现来计算最终成绩并给出对应的字母等级。在开发过程中,我们面临了一些问题,希望能得到解决。

首先,我们希望将这些功能组织成一个类,以方便管理和维护,但遇到了困难。我们想让这个类能够打印出学生的姓名、最终字母等级和百分比成绩。然而,我们无法将外部数据导入到类中,即使是简单的打印输出。

其次,我们希望允许用户通过输入创建一个新的空字典,以便能够计算班级平均分。我们认为如果能够创建多个字典,就可以通过编写一个函数或方法来计算班级平均分。

解决方案

根据以上问题,我们提出了以下解决方案:

  1. 将代码中的所有功能组织成一个类,命名为“Student”。该类具有三个属性:“name”(姓名)、“homework”(家庭作业成绩)、“quizzes”(测验成绩)和“tests”(考试成绩)。
  2. 在“Student”类中定义一个“get_average”方法,用于计算该学生在所有作业中的平均成绩。
  3. 在“Student”类中定义一个“get_letter_grade”方法,用于根据学生的平均成绩给出对应的字母等级。
  4. 在“Student”类中定义一个“str”方法,用于打印学生的姓名、最终字母等级和百分比成绩。
  5. 定义一个“maker_d”函数,用于从用户输入中创建“Student”类对象。
  6. 定义一个“get_class_average”函数,用于计算学生班级平均分。

以下是代码示例:

class Student:

    # Constructor
    def __init__(self, name, homework, quizzes, tests):
        self.name = name
        self.homework = homework
        self.quizzes = quizzes
        self.tests = tests

    # Function to return average for this student
    def get_average(self):
        h = average(self.homework)
        ...
        return total_average

    # Function to return letter grade for this student
    def get_letter_grade(self):
        score = self.get_average()
        if score >= 90:
            return "A"
        elif 80<= score <90:
            return "B"
        elif 70 <= score < 80:
            return "C"
        elif 60 <= score < 70:
            return "D"
        else:
            return "F"

    # Function to print student's name, letter grade, and percentage
    def __str__(self):
        return "%s, your final grade is a %s based on your overall percentage of %f" % (self.name, self.get_letter_grade(), self.get_average())

def maker_d():
    name = raw_input("Please enter the student's name: ")
    student1['Name'] = name
    homework = raw_input("Please enter all of the student's homework grades separated by     a space: ")
    homework = [float(i) for i in homework.split()]
    student1['homework']= homework
    quizzes = raw_input("Please enter all of the student's quiz scores separated by a space: ")
    quizzes = [float(i) for i in quizzes.split()]
    student1['quizzes'] = quizzes
    tests = raw_input("Please enter all of the student's test scores separated by a space: ")
    tests = [float(i) for i in tests.split()]
    student1['tests'] = tests

def get_class_average(student):
    total = 0
    for each in student:
        total += get_average(each)
    return total / len(student)

def main():
    maker_d()
    print get_class_average(student)
    print get_letter_grade(get_class_average(student))

if __name__ == '__main__':
    main()

通过使用类和函数,我们能够将代码组织得更加清晰和易于维护。同时,我们也可以轻松地计算班级平均分。