我们正在开发一个程序来计算学生的分数,该程序将根据学生在家庭作业、测验和考试中的表现来计算最终成绩并给出对应的字母等级。在开发过程中,我们面临了一些问题,希望能得到解决。
首先,我们希望将这些功能组织成一个类,以方便管理和维护,但遇到了困难。我们想让这个类能够打印出学生的姓名、最终字母等级和百分比成绩。然而,我们无法将外部数据导入到类中,即使是简单的打印输出。
其次,我们希望允许用户通过输入创建一个新的空字典,以便能够计算班级平均分。我们认为如果能够创建多个字典,就可以通过编写一个函数或方法来计算班级平均分。
解决方案
根据以上问题,我们提出了以下解决方案:
- 将代码中的所有功能组织成一个类,命名为“Student”。该类具有三个属性:“name”(姓名)、“homework”(家庭作业成绩)、“quizzes”(测验成绩)和“tests”(考试成绩)。
- 在“Student”类中定义一个“get_average”方法,用于计算该学生在所有作业中的平均成绩。
- 在“Student”类中定义一个“get_letter_grade”方法,用于根据学生的平均成绩给出对应的字母等级。
- 在“Student”类中定义一个“str”方法,用于打印学生的姓名、最终字母等级和百分比成绩。
- 定义一个“maker_d”函数,用于从用户输入中创建“Student”类对象。
- 定义一个“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()
通过使用类和函数,我们能够将代码组织得更加清晰和易于维护。同时,我们也可以轻松地计算班级平均分。