根据成绩等级和学生的GPA返回字母等级

时间:2019-10-29 20:19:21

标签: python

我正在做一个作业,我想根据成绩等级和学生的GPA归还字母等级。

我能够成功创建一个计算学生的GPA并将其返回的函数,但是在返回相应字母等级时遇到了麻烦。

这是我到目前为止的代码:

def get_gpa(scale, points):
  for (key, data) in scale.items():
    if points <= data['high'] and points >= data['low']:
      return data['gpa']
  return 0

def calculate_gpa(scale, student):
    totalCredits = 0
    gpa = 0
    for i in student['classes']:
      classGpa = get_gpa(scale, i['points'])
      totalCredits += i['credits']
      gpa += (classGpa) * (i['credits'])
    return gpa / totalCredits

def get_letter_grade_v1(grade_scale, gpa):
  for (key, data) in grade_scale.items():
    if gpa <= data['high'] and gpa >= data['low']:
      return key
    else:
      return 'D'

这是比例尺:

grade_scale = {
 "A+": {"low": 96, "high":100,"gpa":4.0},
 "A" : {"low": 93, "high":95, "gpa":4.0},
 "A-": {"low": 90, "high":92, "gpa":3.7},

 "B+": {"low": 86, "high":89, "gpa":3.3},
 "B" : {"low": 83, "high":85, "gpa":3.0},
 "B-": {"low": 80, "high":82, "gpa":2.7},

 "C+": {"low": 76, "high":79, "gpa":2.3},
 "C" : {"low": 73, "high":75, "gpa":2.0},
 "C-": {"low": 70, "high":72, "gpa":1.7},
}

例如,如果学生的GPA为3.47,则get_letter_grade_v1函数应返回“ B +”。

student123 = {
  "id": "smith123",
  "classes" : [
    {"name": "stats 100",   "points": 88, "credits": 4},
    {"name": "cs 101",      "points": 92, "credits": 3},
    {"name": "history 101", "points": 91, "credits": 3},
    {"name": "Pysch 201",   "points": 86, "credits": 4},
  ]
}

当我为每个班级测试该学生的成绩时,它实际上应该返回“ B +”时仍会继续返回“ D”。谁能指出我的代码出了什么问题或提供一些提示?谢谢!

2 个答案:

答案 0 :(得分:1)

您的问题是,您仅查看一个可能的成绩后就宣布失败:无论学生的成绩如何,您都将在for循环的第一次迭代后返回结果。

def get_letter_grade_v1(grade_scale, gpa):
  for (key, data) in grade_scale.items():
    if gpa <= data['high'] and gpa >= data['low']:
      return key
    else:
      return 'D'

相反,您必须等到所有检查失败:

def get_letter_grade_v1(grade_scale, gpa):
  for (key, data) in grade_scale.items():
    if gpa <= data['high'] and gpa >= data['low']:
      return key

  # When every check has failed:
  return 'D'

更多更新:

  • 您必须以正确的形式提供数据。 3.47是一个非常低的等级:您的等级是百分比,但是您给它提供了GPA。 C截止值为70,而3.47简直太糟糕了。
  • 即使如此,这仍将返回D:您发布的案例的平均值为89.25,不会出现在任何等级范围内。调整您的限制以计入浮动分数,或根据评分范围的要求转换(浮动或最高)平均值。

答案 1 :(得分:0)

除了Prune指出的错误之外,该错误是您正在将GPA与get_letter_grade_v1中的data ['high']和data ['low']进行比较,这些数据的百分比不是GPA。

由于A +和A在grade_scale中具有相同的GPA,因此该等级也无法从GPA恢复。