根据测试计算最终成绩

2024-09-29 23:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

Lloyd = {
    "name":"Lloyd",
    "homework": [90,97,75,92],
    "quizzes": [ 88,40,94],
    "tests": [ 75,90]
    }
Alice = {
    "name":"Alice",
    "homework": [100,92,98,100],
    "quizzes": [82,83,91],
    "tests": [89,97]
    }
Tyler = {
    "name":"Tyler",
    "homework": [0,87,75,22],
    "quizzes": [0,75,78],
    "tests": [100,100]
    }

def average(value):
    avg=0
    items = len(value)
    for item in value:
        avg +=item 
    return avg/items

def getAverage(dictin):
    hw = average(dictin.get('homework'))
    quiz = average(dictin.get('quizzes'))
    tests = average(dictin.get('tests'))
    weighted_average = hw*.1 + quiz*.3 + tests*.6
    return weighted_average

def getLetterGrade(score):
    if score >=90:
        return "A"
    elif score < 90 and score >= 80:
        return "B"
    elif score < 80 and score >= 70:
        return "C"
    elif score < 70 and score >= 60:
        return "D"
    elif score < 60:
        return "F"
    else:
        return "No grades for you"

score = getAverage(Lloyd)
grade = getLetterGrade(score)
print grade

这很好,但我被告知,如果分数是89.5,它就行不通了。我也试过了,但我不知道问题出在哪里。任何错误都是受欢迎的。在


Tags: andnamegetreturnvaluedeftestsavg
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:49

捕获可能在average函数中,在该函数中,您将一个整数(avg)除以另一个整数(items)。由于两个操作数都是整数,Python也将结果强制转换为整数,因此average函数永远不会返回分数。在

有许多可能的解决方案:

  1. 在除法之前,将其中一个操作数(avgitems)转换为浮点;例如return float(avg)/items,或{}。

  2. avg从0.0开始,而不是从0开始-这确保avg始终是一个浮点。

  3. 在代码的开头添加from __future__ import division。这指示Python以python3.x的方式使用除法,并始终返回一个float。

更新:另外,根据gingerbear先生的评论,您可以考虑在^{中对分数进行四舍五入。如果从math模块导入ceilfloor函数,可以说ceil(score)向上取整,floor(score)将其向下取整,或{}将其四舍五入到最接近的整数。在

相关问题 更多 >

    热门问题